2016-09-23 79 views
0

在Visual Studio中使用Xamarin表單(最新v4.0.30319)並僅針對Android平臺。嘗試使用wcf服務,因此在設計時添加服務的地址(添加服務引用)。假設它被稱爲MyService.svc,並且它在地址爲192.168.100.1的機器上本地運行,添加服務引用url爲http://192.168.100.1/MyService.svc。 「添加服務引用」對話框查找服務並將其添加到PCL項目。到目前爲止沒有問題。在運行時更改地址時,xamarin表單會消耗wcf服務問題

在代碼中,該服務在默認情況下被使用如下: var client = new MyServiceClient();

當android應用程序啓動時,一切正常,可以調用該服務,並按預期從服務返回數據。好東西!到現在爲止還挺好。

但是,這裏是問題出現的地方。在運行時配置服務的地址並不會使其具有很大的可擴展性。因此,服務的地址需要在運行時針對不同系統進行調整。一個簡單的設置頁面允許用戶在應用程序中輸入服務地址,Idea認爲服務將指向該端點地址,而不是默認的「在設計時間配置」地址。同在一處的地址相同配置的設計時服務

var timeout = new TimeSpan(0, 15, 0); 
var binding = new BasicHttpBinding() 
{ 
    Name = "basicHttpBinding", 
    MaxReceivedMessageSize = 2147483647, 
    MaxBufferPoolSize = 2147483647, 
    SendTimeout = timeout, 
    OpenTimeout = timeout, 
    ReceiveTimeout = timeout, 
};     

var endPoint = new EndpointAddress("http://192.168.100.1/MyService.svc"); 
var client = new MyServiceClient(binding, endPoint); 

甚至,我們收到錯誤「有沒有終點在聽{0}是可以接受的消息: 所以我們嘗試作爲記錄了下面的代碼。這通常是由不正確的地址或SOAP操作引起的。有關更多詳細信息,請參閱InnerException(如果存在)。'。鑽入內部異常只會給出一個'NOT FOUND'網絡異常。從調用中移除endPoint變量然後再次工作(因爲它會恢復到設計時地址)。

任何大師的外面都可以幫助我們得到這個工作?

回答

0

管理得到它的工作。

在var client = new後檢查Endpoint.Address MyServiceClient()顯示url爲'http://192.168.100.1/MyService.svc/MyServices.svc',不明白爲什麼svc名稱部分在那裏有兩次,也有複數,但現在它可以工作了... 。