8

次のような署名を持つWebメソッドがあります。

public string[] ToUpper(string[] values)

Visual Studio 2010の[サービス参照の追加]を使用して、サービスへの参照を生成しています。残念ながら、このプロセスは「ArrayOfString」と呼ばれるプロキシクラスを作成し、予想される「string[]」タイプの代わりにこのタイプを使用します。生成された非同期サービス呼び出しの署名は、次のようになります。

public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values) { }
public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values, object userState) { }

構成サービス参照フォームの[コレクション]ドロップダウンのすべてのオプションを試しましたが、違いはないようです。

これは以前は機能していましたが、おそらくサービスから別のWebメソッドを削除した後、何らかの理由で突然機能しなくなりました。

生成されたArrayOfStringタイプの代わりにstring[]タイプを使用するように生成されたサービス参照クラスを取得するにはどうすればよいですか?これに関する助けをいただければ幸いです。

編集: @Olegが示唆しているように、私はASMXWebサービスを使用しています。

4

3 に答える 3

5

ASMX スタイルの Web サービスに「サービス参照」を追加すると、問題を再現できます。ただし、「サービス参照」を WCF サービスに追加するか、「Web 参照」を ASMX サービスに追加する場合、引数の型は string[] でした。

これによると、「サービス参照」を「Web参照」に置き換えることで問題を解決できると思います。

「サービス参照の追加ダイアログ」の「詳細...」ボタンを押します。 サービス参照を追加

「Web参照を追加...」を押します 高度

サービス URL を挿入し、Web 参照を追加します ウェブ参照を追加

于 2011-02-13T13:38:12.320 に答える
2

手遅れですが、将来人々を助けることができます...

svcutil を使用して、DataContractSerializer (デフォルト) ではなくXmlSerializerによってプロキシ クラスをシリアル化することをコマンド ライン ユーティリティに明示的に通知します。サンプルは次のとおりです。

svcutil /out:c:\Path\Proxy.cs /config:c:\Path\Proxy.config /async /serializer:XmlSerializer /namespace:*,YourNamespace http://www.domain.com/service/serviceURL.asmx

Web サービスはASP.NET Webサービスであることに注意してください。

于 2011-04-19T22:11:37.680 に答える