プラットフォーム: 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 ファイルです。これが関係しているかどうかはわかりませんが、念のために文書化しておきたいと思います。
「デバッグモード」では正常に動作するが「リリースモード」では失敗する前に、誰かが何か提案をしたり、これを見たりしましたか?
ありがとうございました!