Asmx Soap Web服务中的额外内容

我已经使用c#制作了自己的asmx Web服务。我的主要班级是这样的

[WebService(Namespace = "my.namespace")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[SoapDocumentService(SoapBindingUse.Literal,SoapParameterStyle.Bare,RoutingStyle = SoapServiceRoutingStyle.RequestElement)]
public class ICService : system.web.Services.WebService
{
    [WebMethod()]
    public ProductListResponse GetProductList(ProductListRequest ProductListRequest) { ... }

}

如果我在网络上查看此方法的xml请求,则结果如下:

<soap:Body>
  <ProductListRequest xmlns="my.namespace">
    . . .
  </ProductListRequest>
</soap:Body>

一切正常,但是当我在任何其他项目中添加对此WS的引用时,我需要为方法调用添加额外的注释。这不是什么大问题,但我想知道为什么会这样。

通话示例:

GetProductListResponse resp = client.GetProductList(new GetProductListRequest
{
    ProductListRequest = new ProductListRequest { }
});

GetProductListRequest 类来自何处? Anwser似乎还有一些额外的类:GetProductListResponse.GetProductListResult.Products,而不只是ProductListResponse.Products。

我已经使用了许多其他Web服务,但是这种行为对我来说是新的。

ttmax_1 回答:Asmx Soap Web服务中的额外内容

当您添加对SOAP Web服务的引用时,Visual Studio可以生成消息协定。这是一个将包装所有方法参数的类。在更新服务并添加新参数时很有用。

如果您不希望这些消息协定,则可以在添加参考时在高级设置中取消选中它。您还可以通过右键单击服务参考,然后选择配置服务参考来访问此表单。

enter image description here

您还可以使用ProductListRequest属性装饰[MessageContract],Visual Studio将使用这种类型而不是创建新的类型。

您可以在官方文档中找到有关消息合同的更多信息:Using Message Contracts

本文链接:https://www.f2er.com/2873171.html

大家都在问