我有 wsdl ,它是由工作网络服务的生成的JAX-WS RI ,但我无权访问该服务。
现在我想做的是,从我得到的wsdl创建自己的WCF服务。所以我可以在配置文件中切换url。
我使用 svcutil.exe 创建了服务界面。
svcutil my.wsdl my.xsd
一切似乎都没问题,直到我试图通过浏览器检查我的服务,我得到了:
操作X和Y具有相同的操作()。每项操作都必须具有唯一的操作值。
嗯......好的。我检查了界面并意识到,是的,代码生成器为每个操作赋予了相同的名称 - “”。[System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
所以我用普通的[OperationContract]
替换了所有这些linse,所有这些似乎都运行良好,直到我试图从客户端调用我的服务。在配置中我刚刚修改了端点地址。
我得到的例外是:由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有Action''的消息
对我来说,似乎客户端正在请求没有名称的操作。工作服务如何知道要使用哪种操作?
如果我将新服务作为新服务引用添加,则一切正常。
我在这里缺少什么?
如何让WCF服务处理从中生成的同一合同?
编辑:
我做了一些调试。我提出了行动
[OperationContract(Action = "*", ReplyAction = "*")]
public object UnknownAction()
{
return null;
}
当我向此操作添加断点时,我从OperationContext.Current.IncomingMessageHeaders.Action
看到Action为空。消息正文虽然完全正确。
我需要在服务器端定义某种行为吗?
当前行为配置如下所示:
<behavior name="svcBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
EDIT vol2
当我创建asmx web服务并尝试从客户端调用web方法时,我得到 SoapException:服务器无法识别HTTP Header SOAPAction的值:。