1

Visual Studio がプロキシ クラスに追加する AuthHeaderValue をクライアントに再調整させることができません。多くの例を見てきましたが、これを解決する方法については何も見つかりませんでした。

石鹸教室

     public class AuthHeader : SoapHeader
     {
        public string Username;
        public string Password;

     }

ウェブサービス

     public class Service1 : System.Web.Services.WebService
     {
        public AuthHeader Authentication; ** where does visual studio append value to proxy 

    [SoapHeader("Authentication", Required = true)]
    [WebMethod]
    public string security()
    {
        if (Authentication.Username == "test" &&
            Authentication.Password == "test")
        {
            return "authenticated";
        }
        else
        {
            return "get lost";
        }            
    }

クライアント

   static void Main(string[] args)
    {
        ServiceReference1.AuthHeader auth = new ServiceReference1.AuthHeader();
        auth.Username = "test";
        auth.Password = "test";

        ServiceReference1.Service1SoapClient ser = new ServiceReference1.Service1SoapClient();
        ser.AuthHeaderValue = auth;  ** does not reconise authheadervalue
        String message = ser.security();
        Console.WriteLine(message);

    }
4

3 に答える 3

0

これを試して

public ServiceAuthHeader Credentials;
public class ServiceAuthHeader : SoapHeader
{
    public string Username;
    public string Password;
}

以下のようにセキュリティ方法を変更します

 public static string Validate(ServiceAuthHeader soapHeader)
 {
        string error_msg = "Pass";
        if (soapHeader == null)
        {
            error_msg = "No soap header was specified.";
        }
        else if (soapHeader.Username == null || soapHeader.Username == "")
        {
           error_msg = "Username was not supplied for authentication in SoapHeader.";
        }
        else if (soapHeader.Password == null || soapHeader.Password == "")
        {
           error_msg = "Password was not supplied for authentication in SoapHeader.";
        }

        else if (soapHeader.Username != "test" || soapHeader.Password != "test")
        {
             error_msg = "Please pass the proper username and password for this service.";
        }

      return error_msg;
 }

いくつかの一般的なクラスまたは他の場所で資格情報を使用してメソッドを保持します

 public static void AuthValidatoin(WebserviceObject callwebservice)
 {
       ServiceAuthHeader serviceAuthHeaderValue = new LocalERPWebService.ServiceAuthHeader();
       serviceAuthHeaderValue.Username = "test";
       serviceAuthHeaderValue.Password = "test";
       callwebservice.ServiceAuthHeaderValue = serviceAuthHeaderValue;
 } 

Web サービスを呼び出すときは、上記の方法を使用して以下のようにサービスを認証します

 WebserviceObject CallWebService = new WebserviceObject();
 common.AuthValidatoin(CallWebService);
于 2016-08-12T04:26:41.297 に答える
0

TRUEヘッダーについては、認証パラメーター値を渡す必要があります。ここで完全なソリューションを確認してください

于 2013-04-24T01:22:22.013 に答える