2013-09-29 6 views
0

내가 일하고있는 프로젝트에서 webservices (asmx)를 호출해야합니다. wcf를 사용하여 호출하고 channelfactory (No reference service reference)를 사용하고자합니다.WCF 채널을 사용하여 웹 서비스 호출하기. 가능합니까?

일부 인터페이스 (계약)가 많지 않을 수 있습니다.

어떻게 끝낼 수 있습니까?

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

는 확실히이 (ASMX) 내 댓글에 확장하려면 시간

+0

적절한 WCF 장식과 웹 서비스의 메서드 시그니처를 사용하여 인터페이스를 만들 수 있으며 그 위에 basicHttpBinding을 더할 수 있습니다. – Tim

답변

1

에 대한

감사 일반적인 시나리오는 웹 서비스를 호출 할 수 있어야합니다, 당신은 인터페이스를 생성 할 수 있어야한다 asmx 서비스의 웹 서비스 메소드와 일치하는 메소드가 있습니다. 예를 들면 :

웹 서비스 방법

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 그때는 모든것을 생성하고 복사 참조를 제거합니다.이 접근법에 내 문제는 내가 일하지 않을 것입니다 내 시나리오에서. 사용자는 단지 "URL"을 넣을 수 있어야하고 메서드는 폼에 나타나서 실행할 것입니다. asmx에 대한 일종의 동적 프록시가 필요합니다. 런타임에 해당 인터페이스를 생성해야합니다. – user9969

+0

서비스가 서로 다르며 미리 알려지지 않은 경우에는 일종의 검색을 수행해야합니다 (amsx에서도 지원하지는 않습니다). 'WebClient' 나 그와 비슷한 어떤 종류의 Http API를 사용하는 것이 더 나을 것입니다. – Tim