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