0

我将解释我到目前为止所做的事情。我正在使用VS2010。首先,我创建了一个 ASP.NET Web 服务应用程序(framewkork 3.5),其中包含具有以下操作的服务:

    [WebMethod]
    public Boolean ShoppingTripNeeded(DateTime d)
    {
        DBConnection db = new DBConnection();
        return db.ShoppingTripNeeded(d);
    }


    [WebMethod]
    public String[] ShopsToVisit(DateTime d)
    {
        DBConnection db = new DBConnection();
        return db.ShopsToVisit(d);
    }

    [WebMethod]
    public Item[] ItemsToBuy(DateTime d, String shop) 
    {
        DBConnection db = new DBConnection();
        return db.ItemsToBuy(d, shop);
    }

现在我正在创建一个 WCF 工作流服务应用程序,我想在其中依次调用上面的 3 个方法,所以我在这里为我的服务 wsdl 添加了一个服务引用:

http://awtassignment3-shoppinglistservice1.cloudapp.net/Service1.asmx?WSDL

此引用添加了 3 个操作。第一个“ShoppingTripNeeded”似乎没问题(接收日期时间并返回布尔值),但对于其他操作,参数发生了奇怪的变化......

例如,操作 ShopsToVisit 现在请求ShopsToVisitRequestBody并返回ShopsToVisitResponseBody ...我不知道为什么会这样!因为第一次手术没问题...

此外,由于我正在使用工作流程,因此我无法“玩”这种类型来了解发生了什么......

你有什么猜测吗?任何帮助都会很好...

非常感谢!

4

1 回答 1

0

您使用 ASMX 有什么原因吗?WCF 已取代 Web 服务成为更高级的服务通信技术。请参阅SO:Web 服务 — WCF 与标准SO:Web 服务与 WCF 服务

要回答您的问题:

WF 3.5 将使用非原语的请求/响应消息模式(例如 bool、int)包装任何操作。String[] 不是原始类型,因此它将被包装。

WF 4.0 添加服务引用(对话框)将默认将所有操作包装在请求/响应消息对中,无论这是原始类型还是复杂类型。最重要的是,它将为它发现的每个操作创建 Activity。

使用请求/响应消息模式允许控制消息形状,特别是消息头。

以供参考:

SO:我什么时候应该使用 Message Contracts 而不是 DataContract,为什么?

MSDN:消息契约

于 2012-12-17T00:11:35.923 回答