我有我的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
带有的消息 行动''无法处理 接收者,由于ContractFilter EndpointDispatcher不匹配。 这可能是因为a 合同不匹配(不匹配的行动 发送者和接收者之间)或a 绑定/安全性不匹配 发件人和接收者。检查一下 发送者和接收者都一样 合同和相同的约束力 (包括安全要求,例如 消息,运输, 没有)。'。 ---&GT; System.Net.WebException:远程 服务器返回错误:(500) 内部服务器错误..
据我所知,ContractFilter和EndpointDispatcher之间存在一些问题。我试图改善,但发现没什么可以理解的......
我还试图以另一种方式调用wcf服务方法:
EnrollmentServiceClient serviceClient = new EnrollmentServiceClient("http://localhost/EnrollmentService.svc");
PublishResult res = serviceClient.PublishEnrollmentProfile(...);
这又回到了我的另一个错误:
找不到端点元素 名称 'http://localhost/McActivation/EnrollmentService.svc' 和合同 'EnrollmentServiceReference.IEnrollmentService' 在ServiceModel客户端中 配置部分。这可能是 因为没有配置文件 找到您的申请,或因为 没有匹配此名称的端点元素 可以在客户端元素中找到..
问题1:
实例化wcf服务客户端的正确方法是什么?
Questions2:
我的情况有什么问题?
非常感谢。
P.S。有些问题我可以通过WcfTestClient连接到服务,更多细节在这里: WCF service: Can't call methods through the 'WebHttpBinding' endpoint
P.P.S。这是服务器端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>
答案 0 :(得分:8)
您的问题是:您的服务配置定义了webHttpBinding
个端点 - 这是 REST (“Xml-over-HTTP”)端点...
然而,您的客户使用basicHttpBinding
这是 SOAP 绑定 - 这些不兼容!
您需要对此进行更改,以确保服务端提供的服务端点能够与客户端连接。
所以:
basicHttpBinding
向服务配置添加另一个端点并连接到该端点或:
webHttpBinding