現象
Xaqmarin.FormsでWCFを構築してテストすると、EndPointが見つからないとエラー出力で終了する。
理由
WCFサービスおよび、WPFなどの、通常の.NETプロジェクトは
App.config(アプリ設定ファイル)に、EndPointのurlが記述される。
しかし、Xamarin.Formsを使ったProjectは、App.configが無いので
プログラムソース内に、On Cordingをする。
※誰か、Android Projectで App.configが使える方法を教えてください。
経緯
WCF Projectの単体テストのUrlは当然LocalhostでテストOK
Android側でテストするとNG、 1日悩みました、Orz......
単体テストOKだから、AndroidのWCF Clientだも読めると簡単に思っていたら
エラー出力なんですから。
Android clientから見たら、Localhostって、Androidじゃないですか!
しっかりと、WCF Serviceが起動している、IP Addressを指定しないとNGになったのです。
XamarinのWCFを使ったサンプルには、そこまで書いていなくて
サンプルをBuildして実行しても、エラーは出ますよね、だって EndPointのUrlが
存在しないんだから。
記述方法
AskServiceReference.EbiServiceClient client;
public MenuViewModel(Page page) : base(page) {
Title = "Aska";
//WCF 開始
var binding = new BasicHttpBinding() {
Name = "basicHttpBinding",
MaxReceivedMessageSize = 67108864,
};
var timeout = new TimeSpan(0, 1, 0);
binding.SendTimeout = timeout;
binding.OpenTimeout = timeout;
binding.ReceiveTimeout = timeout;
client = new AskServiceReference.AskServiceClient (
binding,
new EndpointAddress ("http://192.168.184.172/EbiWcf/EbiService.svc"));
client.OpenCompleted += mDATE_OpenCompleted;
client.GetDataCompleted += mDate_GetDataCompleted;
client.OpenAsync();
}
}
private async void mDATE_OpenCompleted(object sender, AsyncCompletedEventArgs e) {
client.GetDataAsync();
}
private async void mDate_GetDataCompleted(object sender, AskServiceReference.GetDataCompletedEventArgs e) {
foreach (var item in e.Result) {
お知らせ1 = item.お知らせ1;
お知らせ2 = item.お知らせ2;
}
client.CloseAsync();
}
Android Clientだと、無条件に非同期になるようです。
Openしてから、GetDataを行いますが、これだと、画面表示に間に合わないので
Xamarin.FormsのWCFサンプリを参照することをお勧めします。
https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/walkthrough_working_with_WCF/
0 件のコメント:
コメントを投稿