2011-08-23 94 views
1

試圖消耗WebService時,我不斷收到以下錯誤:WCF REST消費誤差

HTTP請求是未經授權的客戶端身份驗證方案「基本」。從服務器收到的身份驗證頭是'Basic Realm'。

該web服務是用WCF編寫的REST。身份驗證基本上通過https。

修復錯誤的任何幫助都會被認可。

這裏是我試過的代碼:

WebHttpBinding webBinding = new WebHttpBinding(); 
    webBinding.Security.Mode = WebHttpSecurityMode.Transport; 
    webBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 

    ChannelFactory<ServiceReferences.BTService.FLDT_WholesaleService> factory = new ChannelFactory<ServiceReferences.BTService.FLDT_WholesaleService>(webBinding, 
                     new EndpointAddress(
                      "https://wholesale.fluidata.co.uk/FLDT_BT_wholesale/Service.svc")); 
    factory.Endpoint.Behaviors.Add(new WebHttpBehavior()); 
    factory.Credentials.UserName.UserName = "username"; 
    factory.Credentials.UserName.Password = "password"; 

    ServiceReferences.BTService.FLDT_WholesaleService proxy = factory.CreateChannel(); 

    proxy.AvailabilityCheck("123"); 
+0

您是否在IIS上託管REST服務? – Codo

+0

@Codo是的。我在IIS中託管它 –

+0

誰應該檢查用戶名和密碼? IIS或WFC服務? – Codo

回答

1

只要你暴露RESTful服務,你可以嘗試使用Fiddler - http://www.fiddler2.com/fiddler2/和/或正常的HttpRequest/HttpResponse對象。你嘗試過那樣的事嗎?

+0

我可以使用httpwebrequest和HttpResponse。我需要使用ChannelFactory來使用它,所以我使用類而不是XML。 –

0

Franek先生的回答很有用 - 您將在WCF工作期間使用Fiddler。我可以添加一點點...這裏發生的是,您已經將「Basic」指定爲您的身份驗證方案作爲客戶端。服務器說「我只允許'基本領域'」作爲認證方案。什麼是'領域'?基本上憑證命名空間:

Realm for HTTP basic authentication

下面是另一個有用的鏈接:Authentication in WinHTTP

我無法找到一個屬性或方法重載攜帶境界......我可能會嘗試構建Authenticate-手動標題WWW

那會去是這樣的:

request.Headers.Add("WWW-Authenticate", string.Format("basic realm=\"{0}\", realm)); 

「境界」是什麼的服務器要求的值,例如,「www.targetsite.com」。

+0

您可以發佈一個如何手動委託Authenticate-WWW頭的例子嗎? –