2013-09-29 42 views
0

在我正在開發的項目中,我需要調用webservices(asmx)。我想使用wcf和使用channelfactory(不添加服務引用)來調用它們。使用WCF通道調用Web服務Factory.Is有可能嗎?

一些可能有一個接口(合同)很多不。

有沒有一個端到端的例子如何做到這一點?

var service=ChannelFactory<?>... How do I get the webserviceContract. 

當然這必須是一個常見的情況是能夠調用web服務(ASMX)

感謝您的時間

+0

您可以嘗試使用適當的WCF裝飾和Web服務的方法簽名創建一個接口,並使用basicHttpBinding。 – Tim

回答

1

要在我的評論擴大,你應該能夠創建一個接口它具有與asmx服務中的Web服務方法相匹配的方法。例如:

Web服務方法

string GetMessage() 

void SendMessage(string message) 

int AddNumbers(int x, int y) 

服務合同

[ServiceContract] 
public interface IServiceName 
{ 

    [OperationContract] 
    string GetMessage(); 

    [OperationContract] 
    void SendMessage(string message); 

    [OperationContract] 
    int AddNumbers(int x, int y) 
} 

的ChannelFactory

ChannelFactory<IServiceName> serviceFactory = 
      new ChannelFactory<IServiceName>(new BasicHttpBinding(), 
          "http://www.services.com/Service.asmx"); 

不是100%肯定這會起作用,但它很容易嘗試。此外,您可能希望在服務合同([ServiceContract(Namespace = "somenamespace")])上設置命名空間以匹配舊式asmx服務,否則可能無法處理消息。

+0

感謝您的時間和答案,將工作,我想了解,我想要做到以下幾點:暫時添加一個webreference/serviceref它生成everthing然後複製並刪除reference.My問題,這種方法是,我不會工作在我的場景中。用戶應該只能放一個「URL」,這些方法就會出現在表單中並執行它們。我需要某種動態代理來處理asmx.I需要在運行時生成這些接口 – user9969

+0

如果服務是不同的和未知的,那麼你需要做一些發現(甚至不知道amsx支持)。你最好使用某種類型的Http API,比如'WebClient'或類似的。 – Tim

相關問題