如何解决如何在WCF中修改wsdl:part的名称和元素属性?
这似乎很简单,但是我对wsdl:part
的元素和名称属性确实感到困惑。这是 C#中的服务代码的一部分:
接口:
[ServiceContract(Namespace = "http://example.org/virtualfoo")]
public interface IRestFooService
{
[OperationContract]
[WebInvoke(UriTemplate = "getFoo",Method = "POST",BodyStyle = WebMessageBodyStyle.Bare,RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)]
getFooResponseMess getFoo(getFooRequest request);
}
服务:
[ServiceBehavior(Namespace = "http://example.org/virtualfoo")]
public class RestFooService: IRestFooService
{
public getFooResponseMess getFoo(getFooRequest request)
{
// code
}
}
复杂类型:
[System.ServiceModel.MessageContractAttribute(IsWrapped = false)]
public partial class getFooResponseMess
{
[System.ServiceModel.MessageBodyMember(Namespace = "http://example.org/virtualfoo")]
public getFooResponse getFooResponse;
public getFooResponseMess()
{
}
public getFooResponseMess(getFooResponse getFooRes)
{
this.getFooResponse = getFooRes;
}
}
getFooResponse
类是另一种复杂类型(自定义类)
我有一个 WCF ,但是当我看到wsdl结构时,我想区分或自定义此部分:
我有这个:
...
<wsdl:message name="getFooResponseMess">
<wsdl:part element="tns:getFooResponse" name="getFooResponse"/>
</wsdl:message>
...
但是我想要这个:
...
<wsdl:message name="getFooResponseMess">
<wsdl:part element="tns:getFooResponse" name="getFooResult"/>
</wsdl:message>
...
显然,如果我更改复杂类型(getFooResponseMess
)类的属性名称,它将同时更改name
和element
属性:
[System.ServiceModel.MessageBodyMember(Namespace = "http://example.org/virtualfoo")]
public getFooResponse getFooResponseTest; // Change
Wsdl输出:
...
<wsdl:message name="getFooResponseMess">
<wsdl:part element="tns:getFooResponseTest" name="getFooResponseTest"/>
</wsdl:message>
...
但是可能有不同的值吗?我该怎么做?我想知道我的错误是什么以及为什么会发生
我一直在寻找其他问题,但是在我的情况下,此问题的解决方案无效:Changing wsdl:part name
解决方法
WCF允许您使用XML的旧式SOAP编码样式,但是,建议不要使用它。使用此样式时(通过将应用于服务合同的System.ServiceModel.XmlSerializerFormatAttribute的Use属性设置为Encoded),适用以下其他注意事项:
-
不支持消息头;这意味着属性MessageHeaderAttribute和数组属性MessageHeaderArrayAttribute与SOAP编码不兼容。
-
如果消息合约未包装,即属性IsWrapped设置为false,则消息合约只能包含一个正文部分。
-
请求消息协定的包装器元素的名称必须与操作名称匹配。为此,请使用消息合同的WrapperName属性。
-
响应消息协定的包装器元素的名称必须与“ Response”后缀的操作的名称相同。为此,请使用消息合同的WrapperName属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。