2012-12-25 23 views
1

不明白如何使它正確,所以,決定問。如何根據模式自動選擇傳輸?

有一些外部服務。這項服務有兩個實施 - 運輸安全和沒有。因此,有兩個網址「http://example.com/service.asmx」和「https://example.com/service.asmx」。

我有應用程序在用戶設置(使用GUI,而不是配置)連接的URL。所以,我用basicHttpBinding和endpoint創建了配置。但是,如果我設置security =「Transport」,那麼我的客戶端不能使用http版本的服務,反之亦然。

那麼,解決這個問題的最好方法是什麼?我應該分析url模式是否由用戶設置並以編程方式根據它改變綁定安全性?

回答

1

您正在查找的信息 - 要使用的綁定,傳輸和安全設置 - 包含在服務的元數據中。因此,如果您在服務上啓用服務元數據,則可以下載WSDL並將其導入。

例如,在一個C#客戶端應用程序,你可以使用WsdlImporter.ImportAllEndpoints()讀你服務元數據的端點配置,然後尋找一個有正確的地址:

var wc = new WebClient(); 
var metadata = new MetadataSet(); 
using (var stream = wc.OpenRead("http://yourserver/YourService.svc?singleWsdl")) 
{ 
    var sd = WS.ServiceDescription.Read(stream); 
    metadata.MetadataSections.Add(new MetadataSection("http://schemas.xmlsoap.org/wsdl/", "Test", sd)); 
} 
var importer = new WsdlImporter(metadata); 
var endpoints = importer.ImportAllEndpoints(); 
foreach (var endpoint in endpoints) 
{ 
    Console.WriteLine(endpoint.Address.Uri); 
    var client = new MyServiceClient(endpoint.Binding, endpoint.Address); 
    client.Hello(); 
} 

你需要System.Web.ServicesSystem.ServiceModel

using System.Net; 
using System.ServiceModel; 
using System.ServiceModel.Description; 
using WS = System.Web.Services.Description; 

endpoint.Addressforeach循環是一個Uri可以對陣你感興趣的人。

如果您只對http或https感興趣,那麼您也可以查看架構。

+0

我什麼也沒有理解。我有WCF客戶端。用戶設置服務網址(我不知道這個網址是怎麼樣的,我甚至不知道服務的主機地址)。端點地址不是在配置中設置,而是在gui中設置。然後? – user876743

相關問題