0

List<string>[]Web サービスに戻り、その戻り値を以下のような Windows フォームで使用し たい:

    [WebMethod]
    public List<string>[] MyMethod()
    {
       ...
       ...

        List<string>[] list_ar = new List<string>[]{list_optgroup, list_option, list_optgroup_option};

        return list_ar;
    }

しかし、Windowsフォーム側では、次のような戻り値を取得する必要があります:

        MyService_Soft service = new MyService_Soft();
        string[][] str_ar = service.MyMethod();

何が起こってList<string>[]いるのですか? Windowsフォーム側でそれを取得するにはどうすればよいですか?

また、これらの行にエラーがあるようです:

        MyService_Soft service = new MyService_Soft();
        string[][] str_ar = service.FillComboBoxes(); 

エラー :

サーバーに自動的にステップインできません。サーバー マシン 'blablabla' への接続に失敗しました。ユーザー名が不明か、パスワードが正しくありません...

このエラーの意味と、その Web サービスのどの行がこのエラーを引き起こしているかを特定するにはどうすればよいですか?

4

1 に答える 1

3

悪いエラーはありません。1 つのデバッグ プロセスから 2 つのプロセスを同時にデバッグすることはできません。サーバー コードは別のプロセスで実行されているため、ステップ インすることはできません。

サーバー コードをデバッグするには、サーバー プロジェクトのソース コードを含む MS Visual Studio (または使用する IDE) の別のインスタンスを開き、[デバッグ] メニューの [プロセスにアタッチ] に移動し、サーバー サービス ホスティング プロセスを見つけて [アタッチ] をクリックします。

List[] の代わりに string[][] を返す場合、クライアント アプリケーションは返されるコレクションのタイプを認識しないため、これも予想される動作です。プロキシ クラスは WSDL ファイルに基づいて自動生成されます。実際には、配列の代わりに List<> を使用するように変更できます。WCF サービスを考慮して、WCF SErvice 参照プロパティを開き、コレクションのタイプを選択します (既定では配列ですが、必要に応じて List に変更できます)。しかし、配列の代わりにリストを取得する必要がある理由はわかりません。唯一の違いは、List が変更可能であることです。 返されたコレクションを変更する機能は論理的に必要ありません。 返された配列に基づいて新しいコレクションを作成し、代わりにそれを変更することをお勧めします。

更新: コード リクエスト。

最後の主な推奨事項のコードは、非常に単純です。

public List<string>[] SomeClientBuilsenessLogicMethod()
{
    var serviceClient = GetServiceClientInstance(); //you might want to have single instance (single connection) of WCF service client, so I implemented it's creation as factory method here.

    string[][] serviceData = serviceClient.MyMethod();

    List<string>[] mutableDataList = serviceData.Select(x=>x.ToList()).ToArray();//Not the best memory usage here probably (better is a loop), but for not big data lists it's fine.

    //Perform any needed operations for list changing. Again there is NO NEED to use List if you don't plan to add/remove items to/from that collection.

    return mutableDataList;
}
于 2013-04-04T16:57:34.850 に答える