2016-08-22 29 views
0

首先,我想分享我想要構建的場景 -
場景: 我正在使用wpf構建客戶端應用程序。在某些情況下,我需要調用Web服務來從服務器獲取數據。爲了做到這一點,我使用wsld url添加了一個web引用。我創建了一個將調用服務方法的ServiceManager類。出於安全原因,我需要在肥皂xml請求添加一些標題信息,例如,UserToken,SAML令牌等。我可以從我的ServiceManager類。但是我想添加另一個類,在向服務器發送請求之前會被調用。在該課程中,我會做一些事情,如添加安全頭到soap xml請求與請求,然後將其發送到服務器。如何在c#中調用soap服務時爲服務管理器類添加委託類?

我使用SOAP擴展來實現我的目的,它運作良好。但問題是,我每次需要在服務方法頂部的Reference.cs(針對每個Web服務引用)文件中添加註釋。我相信還有其他一些最簡單的方法可以使這項工作比SOAP擴展更好。有什麼方法可以只調用服務,委託類將自動調用,而且我不需要向參考文件添加任何註釋?我會在這裏分享我的示例代碼。

ServiceManage類:

public class ServiceManager 
{ 
public UserDataService dataService; //web service added at Web Reference 
public ServiceManager() 
{ 
dataService = new UserDataService(); 
getUserServiceRequest rqst = new getUserServiceRequest(); 
getUserServiceResponse resp = dataService.getUser(rqst); 
} 
} 

Reference.cs

[TraceExtensionAttribute(Name = "First")] 
public getUserServiceResponse getUser([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] getUserServiceRequest request) { 
object[] results = this.Invoke("getUser", new object[] { 
        request}); 
return ((getUserServiceResponse)(results[0])); 
} 

TraceExtensionAttribute.cs

[AttributeUsage(AttributeTargets.Method)] 
public class TraceExtensionAttribute : SoapExtensionAttribute 
{ 
    private string mstrName = null; 
    public override Type ExtensionType 
    { 
     get { return typeof(TraceExtension); } 
    } 
    public override int Priority 
    { 
     get { return 1; } 
     set { } 
    } 
    public string Name 
    { 
     get { return mstrName; } 
     set { mstrName = value; } 
     } 
} 

TraceExtension.cs

public class TraceExtension : SoapExtension 
{ 
    public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attr){//..do something} 
    public override void Initialize(object initializer){//..do something} 
    public override Stream ChainStream(Stream stream){//...do something} 
    public override void ProcessMessage(SoapMessage message) {//..do something} 
} 

回答

0

最後,我找到了解決辦法。只需通過Web Reference,然後添加Service Reference即可。然後去the following link。這個對我有用。

相關問題