2011-09-08 4 views
2

WSE를 사용하여 asmx 웹 서비스에 연결하는 .NET 2.0 Forms App 클라이언트가 있습니다.레거시 WSE 클라이언트를 WCF 서비스에 연결 중 ... 클라이언트가 변경되지 않았습니다.

서비스를 WCF로 업그레이드하고 VS 2010 및 .NET 4를 활용하고 싶지만 기존 (기업) 고객이 클라이언트 소프트웨어/프레임 워크 등을 업데이트하도록 강요 할 수는 없습니다. 역 호환성을 유지할 수 있다면 서비스를 업그레이드 할 수있는 유일한 방법입니다.

고객 끝에서 app.config는 업데이트 할 수 있지만 실행 파일은 업데이트 할 수 없습니다. 즉, 새로운 서비스 참조를 추가 할 수 없습니다.

우리는 클라이언트를 변경하지 않고 클라이언트 응용 프로그램에서 호출을 수락하도록 WCF 서비스를 구성하는 데 실패했습니다. 나는 이것이 심지어 할 수 있는지 의심 스럽다. 물론 클라이언트에서 새로운 참조를 추가하면 작동하지만 기존의 참조를 사용하고 새로운 서비스와 함께 '가짜'하려고 시도하지는 않습니다.

서비스의 끝에있는 설정은 다음과 같습니다

<bindings> 
    <basicHttpBinding> 
    <binding name="OnePointOneBinding" bypassProxyOnLocal="false"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
     maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="ServiceBehaviour" name="xyz.Services.xyzService"> 
    <endpoint binding="basicHttpBinding" bindingConfiguration="OnePointOneBinding" 
     name="BasicBindingSvc" contract="xyz.Services.IxyzService" /> 
    </service> 
</services> 

우리가 얻고있는 오류는 다음과 같습니다

액션과 메시지 'http://webservices.xyz.co.uk/ EndpointDispatcher에서 ContractFilter 불일치로 인해 xyz/DoTest '를 수신자에서 처리 할 수 ​​없습니다. 계약 불일치 (보낸 사람과받는 사람 간의 동작이 일치하지 않음) 또는 보낸 사람과받는 사람 사이의 바인딩/보안 불일치가 원인 일 수 있습니다. 발신자와 수신자가 동일한 계약 및 동일한 바인딩 (메시지, 전송, 없음과 같은 보안 요구 사항 포함)을 가지고 있는지 확인하십시오.

모든 입력 기꺼이 위 대한

+0

당신은 거의 도움을 얻지 못할 정도로 당신이 WSE 설정을 보여주지 않았기 때문에 –

답변

0

일부 WSE 구체적인받은 : 클라이언트의 app.config에서

<policies xmlns="http://schemas.microsoft.com/wse/2005/06/policy"> 
    <extensions> 
    <extension name="usernameOverTransportSecurity" type="Microsoft.Web.Services3.Design.UsernameOverTransportAssertion, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    <extension name="requireActionHeader" type="Microsoft.Web.Services3.Design.RequireActionHeaderAssertion, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </extensions> 
    <policy name="usernameTokenSecurity"> 
    <usernameOverTransportSecurity /> 
    <requireActionHeader /> 
    </policy> 
</policies> 

:

wse3PolicyCache.config에서

<microsoft.web.services3> 
    <security> 
     <!-- Specifies the time buffer used by WSE to determine when a SOAP message is valid. --> 
     <timeToleranceInSeconds value="7200" /> 
     <!-- Defines the default number of seconds that a SOAP message is valid after its creation. --> 
     <defaultTtlInSeconds value="300" /> 
    </security> 
    <policy fileName="wse3policyCache.config" /> 
</microsoft.web.services3> 

을 다른 무엇이 관련 될 수없는 ...

편집 :

그래서 내가 뒷조사를하고 WCF 서비스의 WSDL이 때 http://x.y.x/IService 만드는 네임 스페이스에 추가되고 (나는 'IService'라는 이름 거라고) 인터페이스의 이름을 포함 발견 클라이언트는 http://x.y.z/productname을 기다리고 있습니다. 그래서 인터페이스의 이름을 'productname'으로 바꿨고 이제 네임 스페이스가 정확합니다. 다음과 같은 (새) 오류가 발생했습니다 :

'Authorise2'작업에 대한 요청 메시지 본문을 deserialize하는 중 오류가 발생했습니다. OperationFormatter에 잘못된 Message 본문이 있습니다. 이름이 'Authorise2'이고 이름 공간이 'http : //x.z.z'인 노드 유형 '요소'가 있어야합니다. 이름 'Authorise2'와 네임 스페이스 찾을 노드 유형 '요소' 'HTTP : //x.z.z/productname'인터페이스는 다음과 같은 서명이

:

[의 ServiceContract (네임 스페이스 = "HTTP : //x.y.Z ")] 공중 인터페이스 PRODUCTNAME { [OperationContract를] AuthorisationDetails Authorise2 (문자열 이름, 문자열 암호) }? 지점

'PRODUCTNAME'확장이 추가되는 방법 그래서

등, 어떻게 우리는 그것을 제거합니까?

+0

나는 파기를하고 WCF 서비스의 WSDL에 인터페이스의 이름이 포함되어 있음을 발견했습니다. 'IService')가 네임 스페이스에 추가되어 클라이언트가 http : // xyz/productname을 기다리고있을 때 http : // xyx/IService가됩니다. – Visionary

관련 문제