WCF:我是否需要用动态命名空间替换"http://tempuri.org/"?

cam*_*elt 3 wcf namespaces dynamic

我有一个将部署到多个域的Web服务.我想摆脱WCF默认名称空间" http://tempuri.org/ ",并将其替换为部署Web服务的域,例如" http://mydomain.com/".我知道这里最好的解决方案就是让Web服务存在于一个地方,并使用那个域作为命名空间,但这对我来说不是一个选择.

我在这里找到了对这个问题的部分答案.在这篇文章中,建议的答案是在配置文件中设置一个URL属性,但恐怕我不太明白答案.这个URL属性到底在哪里?此外,由于我无法控制的原因,将使用此Web服务的客户端应用程序没有app.config文件,因此该客户端应用程序中的所有配置都必须在代码中设置.我不确定这是否重要,但我想提一下,以防万一.

编辑:澄清一下,我试图删除的" http://tempuri.org " 引用是在svcutil.exe生成的.cs文件中.

例如

[System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IEmailService/SendEmail", ReplyAction = "http://tempuri.org/IEmailService/SendEmailResponse")]
void SendEmail(Services.Internal.CorrespondenceWebService.Email email);
Run Code Online (Sandbox Code Playgroud)

Joh*_*ers 6

您可能会将XML名称空间与URL混淆.这是一个不是URL的命名空间的例子:urn:schemas-microsoft-com:datatypes.

由于命名空间不一定是URL,因此您不必为每个环境更改它.

另一方面,您应该选择一个名称空间,并一致地使用它.也许是这样的http://services.mydepartment.mycompany.com/myservice/.您真的不想发送仍在使用的服务http://tempuri.org/,因为这表明对命名空间缺乏了解.


响应您更新的问题:这些名称空间存在于由svcutil.exe生成的.cs文件中,因为它们存在于服务的元数据中.您需要在服务中更改它们,并且在创建或更新客户端时,它将具有正确的命名空间.

  • 试试`[ServiceContract(Namespace="http://services.mydepartment.mycompany.com/myservice/")]` (2认同)