的确,如果我想支持PHP客户端访问我的服务,则必须具有基本的HTTP端点.这是因为PHP仍然仅支持肥皂1.1? 据我所知, 解决方案 (自使用PHP以来已经两年)仍然是这种情况. 如果使用PHP的内置SoapClient类构建客户端应用程序,则必须提供一个端点,该端点使用BasichTtpBinding,因为它符合WS-I Basic Profile 1.1,而PHP不提供任何其他标准的其他支持. 我写了一篇有关使用php 5使用WCF服务的文章,一段时间以前: 它说明了如何设置WCF服务以及如何使用PHP 5.
以下是关于 wcf 的编程技术问答
我有一个WCF Web服务,可以通过BasichTTP连接到它,但不能通过WSHTTP连接.我尝试通过WSHTTP通过以下以下内容与之结合: $service = new SoapClient ("http://service.companyname.local:6666/Service/?wsdl", array( "location" => "http://service.companyname.local:6666/Service/WCF", "trace" => true, 'soap_version' => SOAP_1_2 ) ); 调用肥皂构造器的调用正常.当我尝试使用$ client->函数名称调用一个时,该页面只是坐在那里加载了一段时间,并最终返回错误"错误获取HTTP标头".这到底是什么意思,我该如何修复? (从.NET客户端食用服务非常完美.) 解决方案 default config on wshtt
我得到了一个接收文件的方法的WCF服务,看起来像这样的东西 public bool UploadFile(string fileName, byte[] data) { //... } 我想做的是从PHP中将数据发布到WCF服务中的此方法,但是是否可以意识到是否可以将BYTE数组从PHP发布到WCF服务托管的.NET方法. 所以我在想像这样的事情 $file = file_get_contents($_FILES['Filedata']['tmp_name']); // get the file content $client = new SoapClient('http://localhost:8000/service?wsdl'); $params = array( 'fileName' => 'whatever', 'data' => $file ); $client->UploadFile($params); 这可能是可能的,
我有一个WCF Web服务,该服务允许使用用户名和密码身份验证的HTTP上的基本HTTP和WS-HTTP客户端.这是通过在同一服务上的两个绑定来实现的. 所以,该服务位于 https://foo.com/service.svc.svc ,基本的http(soap 1.1)端点是 https://foo.com/service.svc/unp11 ,ws-http(soap 1.2)端点是 客户正在尝试使用其内置的肥皂支持来通过PHP 5访问此Web服务,并且在连接到服务方面遇到困难.他不断获得HTTP 400(不良请求)响应,如果肥皂消息形成不好,或者肥皂1.1消息被发送到SOAP 1.2端点(或VICE). > 我只知道基本的PHP,所以我很难帮助他.我知道您可以通过做 来创建客户 $client = new SoapClient('https://foo.com/Service.svc?wsdl'); 但是如何指定绑定/端点?有什么已知的问题可以通过PHP?
我在我们的一台服务器上的Windows服务中托管WCF服务.使其在.NET中的BasichTpBinding和构建测试客户端(最终起作用)后,我继续使用Soapclient类,并尝试从PHP访问它.最终的消费者将是一个PHP网站,因此我需要在PHP中使其耗尽. 当我必须在PHP代码中的SoapClient类构造函数中输入WSDL URL时,我感到很困难. WSDL在哪里?我只有: http://172.27.7.123:8000/wordservice http://172.27.7.123:8000/wordservice/wordservice/mex 这些都不露出WSDL. 作为WCF的新手,我可能已经问过一个愚蠢的事情(或者我可能在某个地方有一个错误的假设).请温柔:D 和no,显示与 http://172.27.7.123:8000/wordservice : 我是被迫在IIS中托管的吗?我是否被迫使用常规网络服务? 解决方案 这可能会有所帮
我正在寻找有关WCF绑定主题的良好技术细节,我很想知道以下内容. 及其特殊目的和限制的不同WCF绑定的列表. 与其他平台的兼容性/互操作性,例如PHP客户端Java中的WCF服务.支持哪些绑定,而不是. 如果我想通过服务API获取/发布安全数据,如果客户端应用程序在Java或PHP中,我应该使用哪种绑定? 我已经通过Internet浏览了不同的材料,但并非详细且有些分散.等待一些良好的回应. 解决方案 选择右WCF绑定 basichttpbinding :基本的Web服务通信.将WCF服务视为传统ASMX Web服务.用于互操作性.默认情况下没有安全性. WSHTTPBINDING :带有WS-*支持的Web服务.支持交易和可靠的消息传递. WSDUALHTTPBINDING :具有双工合同和交易支持的Web服务. wsfederationhtpbinding :具有联合安全性的Web服务.支持交易. MSMQIntegrationBinding :
我很难从PHP网站使用安全的WCF Web服务.我对PHP的了解有限,我在网络上找到了各种示例,但还没有成功使它们工作. 我有一个Silverlight应用程序,该应用程序还可以消耗此WebS服务,并且效果很好.但是,当我运行PHP网站时,我会收到此错误: MessagesEcurityException:安全处理器无法在消息中找到安全标头.这可能是因为该消息是无抵押的错误,或者是因为交流方之间存在约束力的不匹配.如果为安全配置了服务,并且客户端不使用安全性. 我还试图将自定义粘合剂更改为basichtpbinding.当我这样做时,不再调用自定义用户名验证器.但是,使用basichttpbinding并在我的WCF服务"工作"上删除凭据验证(除了它是不安全的事实之外).因此,问题似乎与安全消息有关. 有人可以给我一个有效的例子或教程,可以帮助我制作此PHP页面? 这是我的php代码: $options = array(
我们正在选择在WCF会话/呼叫之间保存状态的最佳方法.我们发现WCF durableservice 我们的需求. 我们想知道,对于大量使用而言,这是可以的.我们期望有1000多个会话,每个会话将持续约100kb的数据(XML序列化格式),并具有复杂的对象(只有1个对象). 鉴于我们的要求,WCF DurableServices是正确的解决方案吗? 解决方案 durableService使用内置的WCF功能将状态(模块级变量)传达给客户端的状态(使用basichttpcontextbinding或wshttpcontextbinding).持久性机制取决于客户端上的HTTP cookie或肥皂标头,以在呼叫之间存储串行数据.您的平均肥皂消息大小将是100kb加上操作参数在每个呼叫上保留的任何有效负载.您还必须在操作合同和应用程序逻辑中设计cancreateinstance和完整的语义,以正确删除会话有效载荷. 鉴于您的1000+ 并发会话和100KB会话数据的情况
我们正在开发基于WCF的系统.在此过程中,我们试图锁定某些数据被多个用户修改.因此,我们决定拥有一个数据结构,该数据结构将包含锁定逻辑执行的必要信息(例如,存储锁定对象的ID) 我们遇到的问题是在会话之间持续存在数据.无论如何,我们是否可以避免执行昂贵的数据库调用? 我不确定我们该如何在WCF中执行此操作,因为它只能在公开会话中持久数据(内存). 解决方案 服务实现类的静态成员在会话和呼叫之间共享. 其他解决方案 正如吉米·麦克努尔蒂(Jimmy McNulty)所说,一种选择是使用静态成员.我有一个WCF服务,可以根据用户指定的IP地址打开网络连接.我的服务配置为Percall Service实例模式.在每个会话中,我检查一个静态数据结构,以查看是否已经针对指定的IP地址打开了网络连接.这是一个例子. [ServiceContract] public interface IMyService { [OperationContract] voi
我写了一个WCF服务,但是在服务实现中存储的数据并不能在呼叫之间持续存在,即使存储在静态变量中,也不会持续.我该怎么办? 服务实现如下: public class Storage : IStorage { protected static object[] _data; #region IStorage Members public void Insert(object[] data) { lock (_data) { _data = _data.Concat(data).ToArray(); } } public object[] SelectAll() { lock (_data) { return (object[])_data.Clone(); } }
我有一个在登录用户的上下文下运行的EXE. EXE使用WCF使自己成为命名的管服务器(多个客户端将调用它). 用户是否需要特定的权限才能使EXE能够创建命名管道?我已经尝试过以相当最小的权限(即仅在本地用户组中)运行的用户运行,这可以正常运行 - 但我担心当我部署到客户端网站时,用户可能会以某种方式受到限制.表示指定的管道创建不起作用. 解决方案 不需要特殊的权限才能使用NetAnmedPipe绑定来设置WCF服务的服务端. 但是,您确实需要担心客户是否可以找到并连接到服务.有两个方面: 客户必须在网络登录(例如Web应用程序中的远程用户)建立的安全上下文中运行.这是因为WCF拒绝访问网络用户组成员的任何登录. 如果您在Vista或Windows7上运行,如果您希望在用户会话登录的登录之外运行的客户端访问该服务,则需要使用特权的EXE运行.这是因为WCF服务需要将管道名称发布到共享内存对象中,以使客户端找到它:如果WCF服务堆栈可以在全局名称空间中创建此共享内
我正在运行Windows 7,并且通常不是此设置的开发人员,并且最近在C#中构建了WCF REST服务,我现在正在尝试仅在本地计算机上部署到IIS.经过大量争吵,我设置了该应用程序,但是当我导航到应用程序时,我会收到一个错误消息: 汇编错误 描述:在为此请求的资源的汇编过程中,发生了错误.请查看以下特定错误详细信息,并适当修改您的源代码. 编译器错误消息:CS0016:无法写入输出文件'c:\ Windows \ Microsoft.net \ Framework64 \ V4.0.30319 \ extureary asp.net files \ scom_sibyll \ 8c0b945e ' - '访问被拒绝. ' 我尽我最大的能力追捕了网络,并更改了临时ASP.NET文件Fodler上的权限,以允许网络服务帐户的全部权利,并使用Temp文件夹进行了同样的权限.它在失败之前复制了许多文件,因此它大概已经编写了权限,因此我检查了从源文件夹中读取的权限,并且这也可以使
我是肥皂,珀尔和我被要求做的几乎所有其他事情的新手,所以我希望有人可以将我指向正确的方向. 我已经实现了一个简单的WCF解决方案,并且已经写了一个Perl客户端,该客户端使用SOAP :: LITE和SOAP :: DATA将"复杂数据结构"传递给解决方案.到目前为止,所有这些都非常有效,WCF解决方案将" The The The As the As the As and As and Aray"划分,我能够通过服务器端的阵列迭代. 但是,我有一个问题,试图将数据元素附加到Perl侧的数组.我有以下代码,它构建了我需要的数组,但是我需要在代码的稍后将几行附加到数组中,我不知道该如何. # build array of values my $data= SOAP::Data->new (name => 'array', value => [ SOAP::Data->new(name => 'elem:string', value => 'firststr
我需要使用WCF服务发送字节[]数组,并且我关心消息大小和性能.我的问题是:WCF是否在内部将我的二进制数据转换为base64字符串? (我使用nettcpbinding)如果这样做,如何预防? 我的合同看起来像 一样简单 IMyService { byte[] GetData() } 解决方案 在实际XML方面,字节阵列被序列化为 xs xs :base64binary ,它是base64编码(显然). 但是,当您指定NetTcPbinding时,WCF使用XML的二进制消息( binaryMessageEncodingBindingElement ),将这些字节编码为二进制流. 这是一个复杂的过程,但是在一天结束时,如果您使用的任何net*绑定,字节阵列将以RAW BYTES而不是Base64字符串为单位.这是为什么可以使用TCP或命名管绑定的众多原因之一,如果可以的话. .
我有以下设置的WCF服务: netnamedPipeBinding concurrencymode.multiple instancecontextmode.single 现在,我有一个以多线程的方式访问此WCF服务的客户端. 据我所知,我必须为每个线程打开一个新的连接,以避免线程互相阻挡. 在这种情况下,Open()呼叫(服务在同一计算机中)有多贵? 我可以缓存我的客户班吗? (源自ClientBase ),或者WCF是否为类似于SQLConnection Poming的连接提供了一个透明的池? 解决方案 WCF不幸的是没有池客户连接.我发现Open()相对较慢,并且已经建立了自己的汇总机制,可以在客户端和服务器之间打开少数持续的连接. 关于这是一个常见的陷阱是,即使是在客户端和服务器(或任何形式的Communication Exception抛出)之间的简单之类的东西,客户端实例就会进入故障状态并变得无法使用.在此时,您必须使用新实例销毁并
我有两个WCF应用程序在命名管道上通信单向.一切都很好,除了一件事: 通常,请求/响应周期需要零(边际)时间.但是,如果有时间跨度为半分钟而没有任何通信,请求/响应将增加到〜300-500ms. 我环顾了网,我想到了使用心跳/ping机制使通信频道忙碌.使用反复试验,我发现每10秒钟执行请求时,响应时间保持较低.从大约15s间隔开始,"打ic"响应时间开始出现. 现在,我想知道这种现象来自哪里.我尝试将可疑的超时设置在两侧> 1分钟以上,但这无济于事. 任何人都可以解释那里发生了什么吗? 解决方案 Check out Wenlong Dong's blog post, 为什么wcf在闲置15秒后会变得慢? 该帖子还包括一个解决方法,直到修复为止. 其他解决方案 是否有可能将空转过程分为磁盘?如果您将流程保持在两端很忙,但不要让连接很忙,它仍然会发生吗? 可能不是这样,但值得一试.
我发现WCF服务将需要8-10秒才能加载第一次击中.之后,它将不到一秒钟. 有什么想法吗? 解决方案 可能是由于.NET的冷启动.您是否考虑设置 IIS热身模块在初始请求之前初始化依赖项? 来自 通过预加载工艺过程来减少第一个请求的响应时间. IIS应用程序热身模块使您可以在第一个请求到达之前配置要预加载的Web应用程序,以便更快地对第一个Web请求响应. 通过预加载工艺提高可靠性当重叠回收时.因为在重叠的回收方案中,回收的工作过程只能传达其准备就绪,并在完成加载并初始化配置指定的资源后开始接受请求,预先加载依赖项会减少第一请求的响应时间. > > 自定义应用程序的预加载.您可以使用特定的网页和用户身份来配置IIS应用程序热身模块以初始化Web应用程序.这使得创建可以同步或异步执行的特定初始化过程,具体取决于初始化逻辑.此外,这些过程可以使用特定的身份来确保适当的初始化.
我最近开始使用实体框架(版本4.1)和WCF合作. 我正在尝试制作n层ASP.NET应用程序(.NET Framework 4.0),其中数据层由内部使用实体框架的WCF服务组成.实体框架采用的方法是模型第一. 在我的开发环境中,我既有在同一网站下和同一应用程序池下在IIS 7.5上运行的ASP.NET应用程序和WCF服务(这不是很好,但可以使用).在任何WCF服务的首次访问时,性能都非常差,但是随后的访问权限还可以.在第一次访问中表现不佳的原因,解释在这里 - 例如与视图生成相关的间接费用,查询的准备等, 完成开发后,我已经设置了一个使用2台虚拟机的测试环境 - 一台服务器(IIS 7.5),它托管应用程序前端,另一个(再次是IIS 7.5)托管WCF服务 - 在不同的机器,不同的网站和不同的应用程序池. 我期待相同的行为,即对服务的最初访问缓慢,随后访问执行速度要快得多,但是所有对服务的访问都很慢. 问题不是问题很重,并且网络不是问题.我已经执行了一个实体框架
我想通过任何不同的IP限制WCF服务上特定方法的呼叫数量,每个时间范围 x 呼叫 y . 因此,例如,如果IP 10.0.1.1在特定分钟内调用方法register超过5次(调用Minute x),当它尝试在该分钟内第六次调用该方法时被阻止直到分钟(x + 1). 这是因为我系统上唯一的非授权调用是register呼叫.我担心试图用我的服务器将这种方法淹没在负载下挣扎的情况下.这种方法背后有很多处理,它的设计仅被称为偶尔. 我已经考虑将ServiceThrottlingBehavior添加到配置文件,但这是服务的全局,而不是服务方法的本地. 无论是在编程文件还是在配置文件中,是否有好/标准化的方法? 解决方案 做到这一点的一种方法是拥有一个添加实现我的实施看起来像这样: public class PerOperationThrottle: IInstanceContextInitializer { static MemoryCache cac