C# 如何使用浏览器探索WCF方法?

C# 如何使用浏览器探索WCF方法?,c#,.net,wcf,webhttpbinding,C#,.net,Wcf,Webhttpbinding,我有一个net.tcp服务,我想让其他平台(特别是PHP)可以访问它。为此,我使用http绑定 我正在使用以下内容创建http端点: ServiceHost svh = new ServiceHost(typeof(MyService)); var httpLocation = "http://" + address + ":4041"; svh.AddServiceEndpoint(typeof(IMyService), new WebHttpBinding(WebHttpSecurityMo

我有一个net.tcp服务,我想让其他平台(特别是PHP)可以访问它。为此,我使用http绑定

我正在使用以下内容创建http端点:

ServiceHost svh = new ServiceHost(typeof(MyService));
var httpLocation = "http://" + address + ":4041";
svh.AddServiceEndpoint(typeof(IMyService), new WebHttpBinding(WebHttpSecurityMode.None), 
                                   httpLocation);

svh.AddServiceEndpoint(
                    ServiceMetadataBehavior.MexContractName,
                    MetadataExchangeBindings.CreateMexHttpBinding(),
                    httpLocation + "/mex"
                    );

svh.Open();
现在,当我试图通过浏览器进入
http://localhost:4041
,我得到了:

<Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none">
<Code>
<Value>Sender</Value>
<Subcode>
<Value xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:ActionNotSupported</Value>
</Subcode>
</Code>
<Reason>
<Text xml:lang="en-US">
The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).
</Text>
</Reason>


发件人
答:行动不受支持

由于EndpointDispatcher上的ContractFilter不匹配,无法在接收器上处理具有操作“”的消息。这可能是因为合同不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。

我做错了什么?

浏览时,请确保包含
.svc
.asmx
的完整路径以及尾部的
?wsdl

localhost:4041/ServiceVirtualDirectory/Service.svc?wsdl

您是否尝试访问
http://localhost:4041/MyService.svc?wsdl

不确定您的服务是否在设计上是REST-ful的,这就是您使用WebHttpBinding的原因。 如果您的服务实际上是REST-ful,那么它的格式将是
http://localhost:4041/MyService.svc/MyMethod/MyData
您应该可以在浏览器上看到结果。基于ASP.NET线程,您需要附加一个
WebHttpBehavior

如果您的Services不太好,您应该考虑<代码> BaseCtTpBuffs(使用常规SOAP消息)或基于您的需求的表兄弟(参见SO线程)。


希望这能有所帮助。

您尝试浏览的URL是什么(或是其中的一个示例)?您是如何托管WCF的?它是通过visual studio还是IIS?在我的情况下,该路径是什么?我已尝试访问
http://localhost:4041/Service.svc?wsdl
没有任何成功。我不太确定Service.svc是什么,我应该从哪里获取它很难说,你在IIS中托管吗?通常,第一个斜杠是虚拟目录的名称,第二个斜杠是WCF项目的名称。