WCF工作流服务应用程序中参数类型的奇怪更改

时间:2012-12-15 21:48:01

标签: asp.net visual-studio-2010 wcf workflow

我会解释到目前为止我做了什么。我正在使用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”似乎没问题(接收DateTime并返回布尔值),但对于其他操作,参数以奇怪的方式改变了......

例如,ShopsToVisit操作现在要求 ShopsToVisitRequestBody 并返回 ShopsToVisitResponseBody ...我不知道为什么会发生这种情况!因为第一次操作很好......

此外,当我正在使用工作流程时,我不能“玩”这些类型以找出正在发生的事情......

你知道吗?任何帮助都会没事......

非常感谢!

1 个答案:

答案 0 :(得分:0)

您使用ASMX有什么原因吗? WCF取代了Web服务,成为更优越的服务通信技术。请参阅SO: Web Services — WCF vs. StandardSO: Web Service vs WCF Service

回答你的问题:

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

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

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

供参考:

SO: When should I use Message Contracts instead of DataContract and why?

MSDN: Message Contracts