타사 웹 서비스에 액세스하기위한 몇 가지 작은 C# 프로그램을 만들고 있습니다. 이 다른 서비스가 있지만, 구조가 매우 유사하다 - 특히 'QueryOrganisationalCentreIn'동일하게 명명 된 끝점을 사용하는 다중 서비스
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:tns="http://sap.com/xi/A1S/Global" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ...>
...
<wsdl:binding name="binding_SOAP12" type="tns:QueryOrganisationalCentreIn">
...
</wsdl:binding>
<wsdl:service name="service">
<wsdl:port name="binding_SOAP12" binding="tns:binding_SOAP12">
<wsoap12:address location="https://my123456.sapbydesign.com/sap/bc/srt/scs/sap/queryorganisationalcentrein?sap-vhost=my123456.sapbydesign.com"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
으로의 서비스 'QueryCustomerIn'
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:tns="http://sap.com/xi/A1S/Global" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ...>
...
<wsdl:binding name="binding_SOAP12" type="tns:QueryCustomerIn">
...
</wsdl:binding>
<wsdl:service name="service">
<wsdl:port name="binding_SOAP12" binding="tns:binding_SOAP12">
<wsoap12:address location="https://my123456.sapbydesign.com/sap/bc/srt/scs/sap/querycustomerin1?sap-vhost=my123456.sapbydesign.com"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
WSDL에 대한 바인딩
WSDL에 대한 명명 규칙에 두 서비스 모두 끝점을 "binding_SOAP12"로 지정하지만 각 서비스는 다른 위치를 가리 킵니다.
나는 "서비스 참조 추가"와 비주얼 스튜디오 2010에서 클라이언트를 만들 때, 나는 서비스를 다음과 같은 방법으로 액세스 할 수 있습니다
QueryOrganisationalCentreInClient client = new QueryOrganisationalCentreInClient("binding_SOAP12");
을하지만 두 번째 서비스, 두 번째의 유사한 요청을 추가 할 때 서비스
QueryCustomerInClient client = new QueryCustomerInClient("binding_SOAP12");
는 System.InvalidOperationException (엔드 포인트를 찾을 수 없습니다 또는 endpointcontract이 유효하지 않습니다)와 함께 실패합니다.
나는 몇 가지 테스트를 다음과 같은 발견 : 정상적으로 나는 새로운 프로젝트를 생성하면 두 번째 서비스는- 첫 번째 클라이언트를 두 번째 서비스 (Customer ...)를 추가하면됩니다 (다른 서비스가없는 경우).
- 고객 ... 서비스의 (제공된) WSDL 파일을 편집하고 엔드 포인트의 이름을 다른 이름으로 변경하면 첫 번째 서비스 (조직 ...)와 함께 프로젝트에서도 작동합니다.
VisualStudio 2010에서는 동일한 프로젝트의 다른 서비스 계약에서 똑같은 이름의 끝점을 처리 할 수없는 것처럼 보입니다. 그러나 엔드 포인트의 이름 지정을 지시 할 위치에 있지 않기 때문에 :이 문제점에도 불구하고 프로젝트에서 두 서비스를 모두 어떻게 사용할 수 있습니까? 사전에
감사합니다,
전문가가 아니지만 클라이언트에서 직접 전체 바인딩을 호출하는 대신 작업 이름이나 작업을 기반으로 웹 서비스를 호출하려면 몇 가지 구성이 있어야합니다. – kingAm