1

我有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: 。

4

0 回答 0