2

Monotouch で ASMX Web サービスを使用して iPhone アプリケーションを開発しています。WebReference が正しく追加され (.wsdl ファイルのおかげで)、WS 参照の使用を開始しました。

public static string CallWs(string[] arrData_, 
                                        List<string[]> lstObject_)
{
    WebService webService = new Service ();
    webService.CallMethod(arrData_, lstObject_);
}

私の Web サービスには正しいメソッドpublic void CallMethod(string[] arrData_, List<string[]> lstObject_)があり、.wsdl ファイルにはそれが正しく記述されています ( ArrayOfArrayOfString) が、MonoTouch では のように認識されpublic void CallMethod(string[] arrData_, string lstObject_)ます。

だから、私は自分の方法を次のように変更しようとしましたstring[][]同じ問題

NewtonSoft.Json DLL を使用してデータを解析しようとしましたが、これには System.Drawing が暗黙的に必要なので (これは Monotouch には存在せず、CoreGraphics が置き換えます)、見つけて解決することができます。

編集 :

現在の解決策は、参照ファイルを編集し、パラメータ タイプを変更することです。

他の解決策はありますか?MonoDevelop が Web サービスを正しく認識しないのはなぜですか?

4

1 に答える 1

0

などのコレクション型IList<string>は、まだ完全にはサポートされていません。

ここには 2 つの主な問題があります。

  • WSDL からのクライアント プロキシの作成。

    この問題は、Windowsで を使用して回避できSLSvcUtil.exeます。

  • メッセージのシリアル化

    これは、リモート サービスと通信できなくなるため、より深刻な問題です。

不足している部分のいくつかは先週実装しましたが、まだ完全ではありません。ディクショナリ型はまだ不足しており、配列や配列の配列などのより複雑な型を使用してさらにテストを行う必要があります。

別の問題はより表面的なものです。

    [OperationContract]
    IList<int> GetSimpleList();

    [OperationContract]
    int[] GetArray();

WSDL 内 (どちらもArrayOfint)。Visual Studio では、生成されたクライアント プロキシで使用する必要があるコレクションの種類を構成できます (サービス参照を右クリックし、[サービス参照の構成] を選択します。ダイアログの中央に [コレクションの種類] があります)。

MonoDevelop はまだそれをサポートしておらず、配列を使用しています (または、より良い方法: 配列を使用する必要があります。現時点では、単純にクラッシュしています。詳しく見ていきます)。

于 2012-10-01T16:30:53.837 に答える