2

プラットフォーム: Xamarin Studio 4

ターゲット モバイル: Android

Xamarin Studio 4 を使用して取り組んできた basicHttpBinding を使用して、デバッグ モードで完全に正常に動作する WCF サービスを呼び出す Android アプリがあります。これをトラブルシューティングする際に簡単にするために、WCF の "Hello World" 関数を呼び出しています。入力パラメーターはなく、文字列出力のみです。

デバッグ モードでは、"Hello World" 応答が返されます。アプリケーションのビルドを「リリース」に切り替えてアプリケーションを再度実行すると、次のエラー メッセージが表示されます。

System.ServiceModel.EndpointNoFoundException: システム例外が発生しました。---> System.Net.WebException: エラー: ConnectFailure (ホストへのルートがありません) ---> System.Net.Sockets.SocketExcpetion: System.Net.Sockets.Socket.Connect でホストへのルートがありません (System.Net. EndPoint remoteEP) [0x00000] ファイル名不明: 0

WCF を呼び出しているコードは次のとおりです。

BasicHttpBinding binding = CreateBasicHttp ();
BTSMobileWcfClient _client = new BTSMobileWcfClient (binding, endPoint);
_client.SayHelloCompleted += ClientOnSayHelloCompleted;
_client.SayHelloAsync();

private static BasicHttpBinding CreateBasicHttp()
        {
            BasicHttpBinding binding = new BasicHttpBinding
            {
                Name = "basicHttpBinding",
                MaxBufferSize = 2147483647,
                MaxReceivedMessageSize = 2147483647
            };
            TimeSpan timeout = new TimeSpan(0, 0, 30);
            binding.SendTimeout = timeout;
            binding.OpenTimeout = timeout;
            binding.ReceiveTimeout = timeout;
            return binding;
        }

private void ClientOnSayHelloCompleted(object sender, SayHelloCompletedEventArgs sayHelloCompletedEventArgs)
        {
            string msg = null;

            if (sayHelloCompletedEventArgs.Error != null)
            {
                msg = sayHelloCompletedEventArgs.Error.ToString();
            }
            else if (sayHelloCompletedEventArgs.Cancelled)
            {
                msg = "Request was cancelled.";
            }
            else
            {
                msg = sayHelloCompletedEventArgs.Result.ToString();
            }
            RunOnUiThread(() =>{
                var lblSignInError = FindViewById<TextView> (Resource.Id.lblSignInError);
                lblSignInError.Text = msg;
            });
        }

BTSMobileWcfClient は、Web サービスの .svc ファイルに対してツール SLsvcUtil.exe を使用して作成された .cs ファイルです。これが関係しているかどうかはわかりませんが、念のために文書化しておきたいと思います。

「デバッグモード」では正常に動作するが「リリースモード」では失敗する前に、誰かが何か提案をしたり、これを見たりしましたか?

ありがとうございました!

4

3 に答える 3

7

プロジェクトのリリース コンパイルで同じ問題に遭遇しました。しばらくさまよった後、ProjectOptions->AndroidApplication->Required permissions (Xamarin スタジオ) でインターネット許可を設定しました。それは私のために働いているようです

于 2013-09-19T08:03:52.397 に答える
0

解決策 1:


  • インターネット許可を設定する
  • プロジェクト オプション -> Android アプリケーション -> インターネット

解決策 2:


  1. ルートに System.ServiceModel.xml という新しいファイルを作成します。
  2. System.ServiceModel.xml のビルド アクションを LinkDescription に変更します。
  3. 以下を System.ServiceModel.xml に追加します。

    <?xml version="1.0" encoding="utf-8" ?>
    <linker>
       <assembly fullname="System.ServiceModel">
            <type fullname="System.ServiceModel.Channels.ChannelFactoryBase`1">
                <method name="CreateChannel" />
             </type>
        </assembly>
    </linker>
    
  4. リンカー設定が SDK アセンブリのみに設定されていることを確認します。

于 2014-07-11T14:11:02.910 に答える