2010-01-06 2 views
2

Je tente simplement d'utiliser un en-tête de savon à des fins d'authentification. Après l'ajout d'une référence de service à une application de console client, l'en-tête s'affiche en tant que premier paramètre dans la liste plutôt qu'en tant que membre de l'objet client.En-tête de savon asp.net web services apparaissant comme paramètre dans l'appel de service client

Quelqu'un at-il une idée de ce que je fais mal?

WebService:

public class Service1 : System.Web.Services.WebService 
{ 
    public CustomSoapHeader MyHeader; 

    [WebMethod] 
    [SoapHeader("MyHeader")] 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 

    public class CustomSoapHeader : SoapHeader 
    { 
     public string SomeProperty { get; set; } 
    } 
} 

Client:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Service1SoapClient client = new Service1SoapClient(); 
     client.HelloWorld(new CustomSoapHeader()); 
    } 
} 

Répondre

1

Si par vous dire un client WCF "service de référence", le problème est que le serveur est un serveur WCF. Si vous ajoutez la référence en tant que "référence Web", l'en-tête doit apparaître en tant que membre de la classe de proxy client.

0
using System; 
using System.Windows.Forms; 

namespace WebClient 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      // For Web Reference: 
      //ServiceReference1.HelloWorldRequest = new WebClient.ServiceReference1.HelloWorldRequest(); 
      //label1.Text = webService.GetClientTime(5).ToString(); 

      string baseURL = "http://localhost:11674/Service1.asmx"; 

      // Create the SystemService Client 
      // Looking to the ap.config for "Service1Soap" binding string. 
      ServiceReference1.Service1SoapClient systemService 
       = new ServiceReference1.Service1SoapClient("Service1Soap", baseURL); 

      label1.Text = systemService.HelloWorld(); 

      WebClient.ServiceReference1.Auth myAuf = new WebClient.ServiceReference1.Auth(); 

      myAuf.password = "test"; 
      myAuf.user = "test"; 

      try 
      { 
       label2.Text = systemService.GetClientTime(myAuf, 0).ToString(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 
}` 
Questions connexes