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);
    }

そして今、上記の 3 つのメソッドを順番に呼び出したい WCF ワークフロー サービス アプリケーションを作成しているので、ここでサービス wsdl にサービス参照を追加しました。

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

この参照により、3 つの操作が追加されます。最初の "ShoppingTripNeeded" は問題ないように見えますが (DateTime を受け取り、ブール値を返します)、他の操作では、パラメーターが奇妙な方法で変更されています...

たとえば、操作 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 でサービス参照 (ダイアログ) を追加すると、これがプリミティブ型か複合型かに関係なく、既定ですべての操作が要求/応答メッセージのペアにラップされます。その上で、検出した操作ごとにアクティビティを作成します。

Request/Response メッセージ パターンを使用すると、メッセージ シェイプ、特にメッセージ ヘッダーを制御できます。

参考のため:

SO: DataContract の代わりにメッセージ コントラクトを使用する必要があるのはいつですか? その理由は?

MSDN: メッセージ コントラクト

于 2012-12-17T00:11:35.923 に答える