我会解释到目前为止我做了什么。我正在使用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 ...我不知道为什么会发生这种情况!因为第一次操作很好......
此外,当我正在使用工作流程时,我不能“玩”这些类型以找出正在发生的事情......
你知道吗?任何帮助都会没事......非常感谢!
答案 0 :(得分:0)
您使用ASMX有什么原因吗? WCF取代了Web服务,成为更优越的服务通信技术。请参阅SO: Web Services — WCF vs. Standard,SO: 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?