我想知道如何在C#SoapClient(WebService代理)上应用HttpAuth。
我已经google了很多,你可以设置Credentials属性(应用NetworkCredentials对象)。但我似乎无法在这个对象上找到这个属性..
任何帮助都会很棒,
//罗宾
答案 0 :(得分:0)
罗宾,
第一步是使用SDK命令行为您的Web服务实际生成代理类。这可以通过打开命令窗口并输入wsdl /out:myProxyClass.cs http://hostServer/WebserviceRoot/WebServiceName.asmx?WSDL来完成。
如果你已经这样做了,那么你就领先一步了。接下来,您需要将新创建的.cs添加到项目中。通常,我建议您创建一个clientconfig类或类似的东西,以允许您访问通过Web服务可用的方法。例如:
public class WSClientConfig
{
public string endpoint = "";
public string username = "";
public string password = "";
public PurgeFilesServiceWse service;
#region Constructor
public LLClientConfig(string endpoint, string username, string password)
{
if (endpoint == null || username == null || password == null)
{
Console.WriteLine("Usage: ENDPOINT, USERNAME, PASSWORD");
Console.WriteLine("One of these usage items was NULL!");
return ;
}
this.endpoint = endpoint;
this.username = username;
this.password = password;
CreateService();
}
#endregion
#region Class Methods
/// <summary>
/// Create the connection to the web service.
/// </summary>
protected void CreateService()
{
UsernameToken token = new UsernameToken(username, password, PasswordOption.SendHashed);
service = new PurgeFilesServiceWse();
service.Url = endpoint;
// Create a new policy.
Policy webServiceClientPolicy = new Policy();
// Specify that the policy uses the UsernameOverTransportAssertion turnkey security assertion.
webServiceClientPolicy.Assertions.Add(new UsernameOverTransportAssertion());
// Apply the policy to the SOAP message exchange.
service.SetPolicy(webServiceClientPolicy);
service.SetClientCredential(token);
}
#endregion
}
接下来,您将创建此类的实例,并且可以根据需要传入您的Web凭据。 请记住这只是我所做的一个例子,您可能需要稍微调整一下以使用您的解决方案,但它应该保持非常相似我认为。
希望这有帮助!