我有我的 WCF 服务,我从 MSTest 项目创建了对它的引用。这是我如何调用服务方法的示例:
IEnrollmentService serviceClient = ChannelFactory<IEnrollmentService>
.CreateChannel(new BasicHttpBinding(),
new EndpointAddress("http://localhost/EnrollmentService.svc"));
PublishResult res = serviceClient.PublishEnrollmentProfile(...);
我没有执行,而是出现以下错误:
内容类型application/xml;响应消息的 charset=utf-8 与绑定的内容类型不匹配 (text/xml; charset=utf-8)。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法。响应的前 710 个字节是:'
Sendera:ActionNotSupported
由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action '' 的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。---> System.Net.WebException:远程服务器返回错误:(500)内部服务器错误..
据我了解,ContractFilter 和 EndpointDispatcher 之间存在一些问题。我试过goodgle,但没有发现任何可以理解的......
我还尝试以另一种方式调用 wcf 服务方法:
EnrollmentServiceClient serviceClient = new EnrollmentServiceClient("http://localhost/EnrollmentService.svc");
PublishResult res = serviceClient.PublishEnrollmentProfile(...);
这给我带来了另一个错误:
在 ServiceModel 客户端配置部分中找不到名为“ http://localhost/McActivation/EnrollmentService.svc ”和合同“EnrollmentServiceReference.IEnrollmentService”的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。
问题1:
实例化 wcf 服务客户端的正确方法是什么?
问题2:
我的情况有什么问题?
非常感谢。
PS 对于一些问题,我可以使用 WcfTestClient 连接到服务,更多详细信息在这里: WCF 服务:无法通过“WebHttpBinding”端点调用方法
PPS 这里是服务器端 WCF 服务配置:
<system.serviceModel>
<services>
<service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">
<endpoint address="" binding="webHttpBinding" contract="McActivationApp.IEnrollmentService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="McActivationApp.EnrollmentServicBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>