为了连接到soap web服务,我打算对我的客户进行身份验证,但我找不到任何相关信息。在我看来,基于主体的唯一方法可以是Soapheader。 根据我读到的解释,我编写了如下代码:
IService.cs
public interface IService
{
[OperationContract]
bool DoWork();
}
Service.cs
public class Service : IService
{
public AuthHeader Authentication;
[SoapHeader("Authentication", Required = true)]
[WebMethod(Description = "Returns some sample data")]
public bool DoWork()
{
if (Authentication.Username == "userName" &&
Authentication.Password == "pwd")
{
//Do your thing
return true;
}
else
{
//if authentication fails
return false;
}
}
}
主要问题是当我启动项目时,方法的Header部分中没有参数。
<s:envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:header>
<action s:mustunderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/DoWork</action>
</s:header>
<s:body>
<dowork xmlns="http://tempuri.org/" />
</s:body>
</s:envelope>
请您告诉我如何从客户端获取网络服务的用户名和密码? 如果您有其他方式,请告诉我。 我非常感谢你的合作。
答案 0 :(得分:-1)
我首先要包括WCFExtras(https://wcfextras.codeplex.com/)。
然后您可以执行以下操作:
[DataContract]
public class AuthHeader
{
[DataMember]
public string Username { get; set; }
[DataMember]
public string Password { get; set; }
}
[ServiceContract]
[SoapHeaders]
public interface IService
{
[OperationContract]
[WCFExtras.Soap.SoapHeader("AuthHeader", typeof(AuthHeader))]
bool DoWork();
}
public class Service : IService
{
[WebMethod(Description = "Returns some sample data")]
public bool DoWork()
{
AuthHeader authentication = SoapHeaderHelper<AuthHeader>.GetInputHeader("AuthHeader");
if (@"userName".Equals(authentication.Username) && @"pwd".Equals(authentication.Password))
{
//Do your thing
return true;
}
else
{
//if authentication fails
return false;
}
}
}