2009-11-27 4 views
6

http 및 net.pipe를 통해 액세스 할 수있는 서비스가 있습니다. IIS 7 (Server 2008)에서 호스팅되고 있습니다. 나는 같은 머신에있는 여러 고객들을 위해이 서비스의 다른 인스턴스를 호스팅 할 수 있습니다. 따라서 HTTP는 가상 호스트 이름 등으로 설정됩니다. 이것은 모두 정상적으로 작동합니다. 그러므로 다른 net.pipe 쓰레기통으로 다른 고객의 인스턴스에 액세스하는 나에게 을 허용, 명명 된 파이프 기본 주소에서 고객의 virtualhostname '의 일부 양식을 사용하여 -IIS에서 WCF net.pipe 바인딩을 호스팅 할 때 명명 된 파이프의 이름을 제어합니다.

은 내가 바인딩 순 명명 된 파이프 유사 할 것이라고 생각 (나는 net.pipe 이름은 URN이 URL이 아니라는 것을 깨닫기 때문에 그들은 본질적으로 임의적 일 수 있지만 나는 HTTP 주소와 비슷한 패턴을 따를 것이라고 생각했다). net.pipe에 대한 기본 주소 IIS에 의해 무시 될 보인다 -

여기

<service name="Administration" behaviorConfiguration="AdministrationBehavior"> 
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="normalWsBinding" contract="IAdministration" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    <endpoint address="" binding="netNamedPipeBinding" bindingConfiguration="normalNetNamedPipeBinding" contract="IAdministration" /> 
    <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://virtualhostname.com/service" /> 
     <add baseAddress="net.pipe://virtualhostname.com/administration/service" /> 
     </baseAddresses> 
    </host> 
</service> 

그러나, 서비스에 대한 WSDL을 액세스하는 내 Web.config를합니다. 대신 컴퓨터의 실제 호스트 이름을 얻고 IIS가 전적으로 포맷 한 것으로 보이는 net.pipe 주소 URN을 얻습니다. net.pipe 이름을 형성하는 방법에 대해 아무런 제어

<wsdl:port name="NetNamedPipeBinding_IAdministration" binding="tns:NetNamedPipeBinding_IAdministration"> 
    <soap12:address location="net.pipe://realhostname/service/Administration.svc"/> 
    <wsa10:EndpointReference> 
     <wsa10:Address>net.pipe://realhostname.com/service/Administration.svc</wsa10:Address> 
     <Identity> 
      <Spn>host/realhostname.com</Spn> 
     </Identity> 
    </wsa10:EndpointReference> 
</wsdl:port> 

, 나는 기계에 여러 고객 서비스 인스턴스간에 을 구별 할 수 없습니다. 아무도 방법에 관해서 어떤 단서가 있습니까 URN이라는 이름의 파이프 바인딩은 IIS 환경 내에서 제어 될 수 있습니까?

(I는 테스트 기간 동안 호스팅 독립 net.pipe을 많이 할 (즉, 새로운 ServiceHost를()) 그래서 난 내 net.pipe 바인딩은 IIS의 외부에서 작동 않는다는 것을 알고, 정확한 명명 된 파이프를 제어 을 허용 할 이름이 IIS 내에서 제어 할 수없는 경우 URN은

) 사용 - 누군가가 호스팅과 같은 컴퓨터에 여러 개의 별도의 net.pipe 서비스 인스턴스에 액세스 어떤 경험이 있습니까?

+0

net.pipe 바인딩은 "컴퓨터"에서만 작동한다는 것을 알고 있습니다. IIS에서 호스팅되는 경우에도 다른 컴퓨터에서 액세스 할 수 없습니다 .... –

+0

IIS에서 호스팅 할 때 실제로 서비스 주소를 선택하지 않아도됩니다. 항상 http : // machinename [: port ]/virtualdir/yourservice.svc' - net.pipe 주소에도 동일하게 적용됩니다 - IIS에서 호스트되는 경우 이름 지정을 제어 할 수 없습니다 .... –

+0

예, HTTP 끝점은 액세스 오프 머신을위한 것이며, 일부 제한된 (그러나 희망에 따라 더 빠른) 온 머신 접근을 위해 net.pipe 엔드 포인트를 사용하기를 희망했다. IIS에서 HTTP 끝점을 호스팅 할 때 사용하려는 도메인을 지정하기 때문에 일부 수준에서 서비스 주소를 선택하게됩니다. 이 날은 다른 URL 즉 http://customer1.com/admin/Admin.svc 및 http://customer2.com/admin/Admin.svc 내가 할 수있는 경우 '를 통해 여러 IIS 사이트 각 접근을 할 수 있습니다 net.pipe에 대한 내 기본 주소를 선택하지 마십시오. IIS의 다른 고객을 위해 호스팅되는 여러 net.pipe 바인딩을 어떻게 가질 수 있습니까? –

답변

2

이 오래된 질문입니다,하지만 난이에 대한 답변이 필요하기 때문에 나는 내 대답을 추가 할 것 (그리고 아마도 다른 사람이 거기 밖으로 생각하는 사람들 그것도 필요함).

IIS가 호스팅하는 WCF 서비스의 기본 주소는 IIS에서 제어되며 web.config에서 재정의 할 수 없습니다. 대신 서비스를 호스팅하는 사이트의 IIS 사이트 바인딩 정보를 업데이트하여 기본 주소를 제어 할 수 있습니다.

온라인에서 찾은 대부분의 설명서는 *를 net.pipe의 바인딩 구성으로 사용하는 것을 제안합니다. 그러나 "virtualsite.com"을 바인딩 구성 값으로 사용하는 경우 net.pipe 끝점의 기본 주소는 컴퓨터 이름이 아니라 "virtualsite.com"이됩니다.

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='virtualhostname.com'] 

어때 HostnameComparisonMode, 그것은 MSDN 따른 IIS에 아무런 영향을 미치지 않는다 참고 :

여기

바인딩 올바른 net.pipe로 IIS에서 사이트를 구성하는 APPCMD 명령어 사용 예는

이 값은 IIS (인터넷 정보 서비스) 또는 WAS (Windows Process Activation Service) 호스팅 환경에서 사용될 때 아무런 영향을주지 않습니다. 이러한 경우 WCF는 WCF 서비스를 호스팅하는 IIS 웹 사이트에서 제공하는 호스트 이름 비교 모드를 사용합니다.

대신 위에 설명한 메커니즘을 사용해야합니다. IIS에서 HTTP에서 hostname 바인딩이 작동하는 방식을 조사하여이 사실을 알게되었습니다. 아쉽게도 다른 WCF 전송에 대한 IIS 기반 시나리오에 대한 공식 문서를 찾을 수 없었습니다.

+0

Chris에게 감사드립니다. 이 문제를 해결할 필요가 오래 동안 지났지 만 좋은 정보처럼 보입니다! –

0

URI의 호스트 이름 부분이 무시되고 채널 바인딩의 HostNameComparisonMode에 기반한 구현으로 대체 된 것처럼 보입니다. 당신은

http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.hostnamecomparisonmode.aspx

NetNamedPipeBinding.HostnameComparisonMode 에게 ... 서비스의 구성을 통해 "정확한"로 변경 호스트 이름이 일치하는 서비스 연결에 사용되는 여부를 나타내는 HostnameComparisonMode 값을 시도 할 수 있습니다 URI. 기본값은 StrongWildcard()입니다.이 값은 일치하는 호스트 이름을 무시합니다.

여기에 구성 구문을 참조하십시오 : http://msdn.microsoft.com/en-us/library/ms731291.aspx

+0

원래 응답 이후이 새로운 경우 확실하지 않지만 귀하의 링크에 따르면 HostnameComparisonMode는 IIS에서 아무런 영향을 미치지 않습니다. –

관련 문제