2016年12月20日火曜日

Xaqmarin.FormsでWCFを構築してテストすると、EndPointが見つからないとエラー出力で終了する。

現象
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 件のコメント:

コメントを投稿