[silverlight]WCF和Web Service(ASMX)的soap header传输方法
最近在研究silverlight的調用webservice或者WCF的安全驗證問題,其中一個最基本的安全驗證方法就是把用戶名或者密碼加入soap header里去,但是很多人都不知道怎么做,因為silverlight沒有soapheader這個類。下面是我總結的方法,希望能幫助有需要的人。
1.webservice(ASMX)的soap header傳輸。
a.客戶端,也就是XXX.xaml.cs這個頁面.
private void button_Click(object sender, RoutedEventArgs e)
??????? {???????????
??????????? Binding myBinding = new BasicHttpBinding();
??????????? EndpointAddress myAddress = new EndpointAddress("http://localhost:3597/WebService3.asmx");
??????????? ServiceReference5.WebService3SoapClient service = new ServiceReference5.WebService3SoapClient(myBinding, myAddress);
??????????? service.HelloWorldCompleted+=new EventHandler<HelloWorldCompletedEventArgs>(service_HelloWorldCompleted);
??????????? OperationContext.Current = new OperationContext((IContextChannel)service.InnerChannel);
??????????? MessageHeader header = MessageHeader.CreateHeader("user", "", "utence.com");
??????????? OperationContext.Current.OutgoingMessageHeaders.Add(header);
??????????? header = MessageHeader.CreateHeader("pwd", "", "utence");
??????????? OperationContext.Current.OutgoingMessageHeaders.Add(header);??
??????????? service.HelloWorldAsync();
??????? }
??????? void service_HelloWorldCompleted(object sender, HelloWorldCompletedEventArgs e)
??????? {
??????????? MessageBox.Show(e.Result);
??????? }
?
b.WebService3.asmx代碼
? [WebMethod]
??????? public string HelloWorld()
??????? {
??????????? Stream HttpStream = HttpContext.Current.Request.InputStream;
??????????? HttpStream.Position = 0;
??????????? XmlDocument dom = new XmlDocument();
??????????? dom.Load(HttpStream);
????????????return dom.InnerXml.ToString(); //獲取整個xml字符串
??????????? //return dom.GetElementsByTagName("user").Item(0).InnerText; //獲取user節點的值
??????????? //return dom.GetElementsByTagName("pwd").Item(0).InnerText; //獲取pwd節點的值
??????? }
?
2.WCF的soap header傳輸
a.客戶端,也就是XXX.xaml.cs這個頁面.
private void button_Click(object sender, RoutedEventArgs e)
??????? {??????
??????????? Binding myBinding = new BasicHttpBinding();
??????????? EndpointAddress myAddress = new EndpointAddress("http://localhost:3597/Service3.svc");
??????????? //ServiceReference.WebService3SoapClient service = new ServiceReference5.WebService3SoapClient(myBinding, myAddress);
??????????? ServiceReference6.Service3Client service = new ServiceReference6.Service3Client(myBinding, myAddress);
??????????? service.GetWorkCompleted += new EventHandler<GetWorkCompletedEventArgs>(service_GetWorkCompleted);
??????????? OperationContext.Current = new OperationContext((IContextChannel)service.InnerChannel);
??????????? MessageHeader header = MessageHeader.CreateHeader("user", "", "utence.com");
??????????? OperationContext.Current.OutgoingMessageHeaders.Add(header);
??????????? header = MessageHeader.CreateHeader("pwd", "", "utence");
??????????? OperationContext.Current.OutgoingMessageHeaders.Add(header);??
??????????? service.GetWorkAsync();
}
??????? void service_GetWorkCompleted(object sender, GetWorkCompletedEventArgs e)
??????? {
??????????? MessageBox.Show(e.Result);
??????? }
b.Service3.svc代碼
??????? public string GetWork()
??????? {
??????????? OperationContext.Current.RequestContext.RequestMessage.ToString();?//返回整個XML代碼
??????????? int index = OperationContext.Current.IncomingMessageHeaders.FindHeader("user","");//獲取節點user的索引值
??????????? string h = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(index);//返回user節點值
??????????? return h;
??????? }
轉載于:https://www.cnblogs.com/lwzeng/archive/2010/05/19/1739043.html
總結
以上是生活随笔為你收集整理的[silverlight]WCF和Web Service(ASMX)的soap header传输方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual 数据绑定
- 下一篇: DataSet DataTable操