2012-08-16 4 views
0

자체 호스팅 서비스에 비보안 엔드 포인트를 추가하려고 시도 했으므로 기본적으로 세션과 다른 인터페이스를 사용하는 인터페이스가 있습니다. 그렇지 않은 사람. 둘 다 동일한 클래스에 의해 구현됩니다.공용 공용 메소드로 2 개의 인터페이스 엔드 포인트 게시 - 조작은 이미 내 보낸 메시지 요소 ...를 참조합니다.

<service name="PT.DataServices.WCFService.PTDataServices" behaviorConfiguration="dataServiceBehavior"> 
    <endpoint address="PTDataServices" binding="wsHttpBinding" contract="PT.DataServices.WCFService.IPTDataServices" bindingConfiguration="wsHttpBinding1"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 

    <endpoint address="PTDataServicesNoSessions" binding="wsHttpBinding" contract="PT.DataServices.WCFService.IPTDataServicesNoSessions" bindingConfiguration="wsHttpBinding2"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 


    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 

    <host> 
     <baseAddresses> 
     <add baseAddress="http://*/PT6/DataServices/"/> 
     </baseAddresses> 
    </host> 
    </service> 

인터페이스 세션하지 않고 : : 여기 내 서버 설정 파일의 일부이다 세션과

[ServiceContract(
    SessionMode = SessionMode.NotAllowed 
)] 
public interface IPTDataServicesNoSessions 
{ 
    [OperationContract] 
    string GetData(int value); 

} 

인터페이스 :

[ServiceContract(
    SessionMode=SessionMode.Required 
)] 
public interface IPTDataServices 
{ 
    [OperationContract(IsInitiating = true, IsTerminating = false)] 
    DcUser InitSession(string userCode, string passwordEncrypted, string connectionString); 

    [OperationContract(IsInitiating = false, IsTerminating = true)] 
    int EndSession(); 

    [OperationContract(IsInitiating = false, IsTerminating = false)] 
    string GetData(int value); 
} 

는 퍼팅 : HTTP :에 // localhost를/PT6/DataServices에의/브라우저에서 다음을 반환합니다.

The PT.DataServices. WCFService.IPTDataServicesNoSessions.GetData 작업은 PT.DataServices.WCFService.IPTDataServices.GetData 작업에서 이미 내 보낸 메시지 요소 [http://tempuri.org/:GetData] 을 참조합니다.

나는 그것이 2의 각에서 동일한 방법을 확인 있다고 WCF 말할 수 어떻게 동적으로 사용되는 엔드 포인트에 따라 다른 방법 이름을 사용하는 모든 클라이언트를 변경하지 않으

... 인터페이스?

+0

서비스를 재구성 했습니까? 그것으로부터 메타 데이터 정보를 얻기 위해 그것을 사용할 수 있습니까? – tsells

+0

@tsells 브라우저에 http : // balrog/PT6/DataServices /를 입력하면 더 많은 정보를 얻을 수 있습니다. 그래서 제 편집 된 질문을 참조하십시오. – zukanta

답변

1

나 자신을 알아 냈어. 내 인터페이스에 네임 스페이스 특성을 추가하는 데 필요한 :

[ServiceContract(
    SessionMode=SessionMode.Required, 
    Namespace = "PTDataServices/WithSession" 
)] 

[ServiceContract(
    SessionMode = SessionMode.NotAllowed, 
    Namespace = "PTDataServices/NoSessions" 
)] 

을 WCF는 두 인터페이스에서 이름이 같은 방법에 대한 WSDL의 메소드 이름 충돌을 방지하기 위해이있었습니다.