2016-04-19 87 views
2

我試圖通過在SOAP頭中傳遞用戶憑證來驗證對WCF Web服務的外部請求。如何驗證對WCF Web服務的外部請求?

using (UsrService client = new UsrService()) 
{ 
    client.Credentials = new System.Net.NetworkCredential("User 1", "Password 1"); 
    client.SomeRemoteMethod(); 
} 

我得到異常:

未處理的異常:System.Net.WebException:請求與 失敗的錯誤消息:對象移動

Unhandled exception: System.Net.WebException: The request failed with the error message: 
-- 
<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="/NuiLogin.aspx?ReturnUrl=%2f0%2fServiceModel%2fSimp 
leCustomService.svc%2fsoap">here</a>.</h2> 
</body></html> 

--. 
    in System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClien 
tMessage message, WebResponse response, Stream responseStream, Boolean asyncCall 
) 
    in System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodNa 
me, Object[] parameters) 
    in UsrService.SayHello() in c:\VS2015\Projects\WCFSharedDLL\WCFSharedDLL\TestPr 
oxyClass.cs:line 44 
    in ConsoleApplicationForTesting.Program.Main(String[] args) in c:\VS2015\Projec 
ts\ConsoleApplicationForTesting\ConsoleApplicationForTesting\Program.cs:line 1 
6 

哪有我驗證對WCF Web服務的外部請求?

我將非常感激這些信息。謝謝大家。

回答

0

以下列方式製作。

通過使用傳輸協議我發送的用戶憑據,如下所示:

public const string authServiceUri = "http://localhost:8080/ServiceModel/AuthService.svc/Login"; 
public static CookieContainer AuthCookie = new CookieContainer(); 

public static bool TryLogin(string userName, string userPassword) 
{ 
    var authRequest = HttpWebRequest.Create(authServiceUri) as HttpWebRequest; 
    authRequest.Method = "POST"; 
    authRequest.ContentType = "application/json"; 
    authRequest.CookieContainer = AuthCookie; 

    using (var requesrStream = authRequest.GetRequestStream()) 
    { 
     using (var writer = new StreamWriter(requesrStream)) 
     { 
      writer.Write(@"{ 
       ""UserName"":""" + userName + @""", 
       ""UserPassword"":""" + userPassword + @""" 
      }"); 
     } 
    } 

    using (var response = (HttpWebResponse)authRequest.GetResponse()) 
    { 
     if (AuthCookie.Count > 0) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

然後,我設置的CookieContainer如下:

client.CookieContainer = AuthCookie; 

之後,它成爲可能訪問Web - 服務:

static void Main(string[] args) 
{ 
    using (UsrService client = new UsrService()) 
    { 
     if(TryLogin("User 1", "User 1")) 
     { 
      client.CookieContainer = AuthCookie; 
      Console.WriteLine(client.SayHello()); 
     } 
    } 
} 

enter image description here

雖然目前還不清楚爲什麼我無法通過在SOAP頭中傳遞證書來驗證請求...

相關問題