2011-02-15 3 views
39

Azure에 배포 한 간단한 서비스가 있습니다. , 분명히WSDL URL을 내부 컴퓨터 이름에서 공개로 변경하는 방법은 무엇입니까?

svcutil.exe http://rd001520d328923a/MyTestService.svc?wsdl 

를 WSDL이있는 시스템 외부에서 액세스 할 수 없습니다 :

http://xxxxxxxxxxxxxxxxxxxxxxx.cloudapp.net/MyTestService.svc 

은 WSDL에 대한 URL은 공공 DNS 대신 내부 컴퓨터 이름을 사용을 통해 액세스 할 수 있습니다.

IIS에서이 프로그램을 실행하는 경우 또는 서비스 URL을 알고있는 경우 변경할 수있는 몇 가지 사항을 알고 있습니다. 예를 들어 <serviceMetadata> 구성을 변경하여 httpGetUrl 속성을 지정하면되지만 절대 URL을 포함해야하므로 작동하지 않습니다. 상대 URL을 사용하면 여전히 내부 시스템 이름이 사용됩니다. 실제 문제는 WSDL에 컴퓨터 이름과 함께 URL 참조가 포함되어있어 쓸모 없게 만듭니다. 내가, WSDL을 잡아가 ​​다른 URL에서 액세스 할 수 있도록 그것을 URL을 수정 한 후 업로드를 편집 할 수 있음을 제안하고있다

  • :

    두 이하의 해결 방법이 있습니다.

  • 2010 년 초부터 핫픽스를 사용할 수 있었지만 더 나은 방법이 있어야합니다.

컴퓨터 이름 대신 일반인이 DNS를 사용하게하려면 어떻게 해결할 수 있습니까?

답변

63

확인. 나는 이것을 거의 일주일 동안보고 있었다. 마침내 대답을 찾았습니다. 쉽게 구할 수 없기 때문에 색인이 생성되어 다른 사람들에게 시간을 절약 할 수 있기를 바랍니다.

기본적으로이 전체 동작은 핫픽스를 릴리스 한 WCF 3.0/3.5의 알려진 문제입니다. 당신은 더 많은 것을 여기에서 알 수있다 : FIX: URIs in a WCF WSDL document refer to inaccessible internal instances instead of to the load balancer...

나는이 연구를 몇 번이나 보았지만 제 2의 생각을하지 않았다. 왜냐하면 대부분 내가 Azure에 핫픽스를 어떻게 배치할지 모르기 때문이다.

MSDN 포럼의 Microsoft 중재자는이 문제가 .net 4.0에서 수정되었다고 지적했습니다. 이것이 의미하는 바는 위의 KB 기사에서 권장하는 "수정 사항"이 여전히 적용되었지만 핫픽스를 적용하지 않아야한다는 예외입니다. 그래서 해결책은 무엇입니까?

<serviceBehaviors> 
    <behavior name="<name>"> 
    <!-- Other options would go here --> 
    <useRequestHeadersForMetadataAddress> 
     <defaultPorts> <!-- Use your own port numbers --> 
      <add scheme="http" port="81" /> 
      <add scheme="https" port="444" /> 
     </defaultPorts> 
     </useRequestHeadersForMetadataAddress> 
    </behavior> 
</serviceBehaviors> 

을 그리고 그것은 그 것이었다 : 간단한의 설정 파일에 다음을 추가합니다. 이 문제가 수정되었다는 것이 명확 해지면 훨씬 간단한 검색이었을 것입니다. 아마 나는 충분히 열심히 didnt한다.

+1

이 작업은 우리에게 완벽하게, 우리는 우리의 wsdl에서 localhost 참조를 얻었고 이제는 적절한 외부 주소 (.NET 4.0, 자체 호스팅 wcf)를 얻게되었습니다 –

+1

덕분에 많은 시간을 절약 할 수있었습니다. –

0

게시하기 위해 WSDL을 생성하고 있습니까? 아니면 다른 프로젝트에서 참조를 추가하려고합니까?

나중에있을 경우 "서비스 참조 추가"보다는 WCF ChannelFactory 접근 방식을 사용하는 것이 좋습니다. 나는 그것이 나를 더 일관성있는 제어 가능한 결과를 준다는 것을 안다.

http://msdn.microsoft.com/en-us/library/ms734681.aspx

나는 추가해야합니다, 나는 푸른에이 시도하지 않았습니다.

+0

둘 다. 우리는 파트너가 그것을 소비 할 필요가 있습니다. – Victor

+0

WSDL이 올바른 URL에서 작동합니까? 메타 데이터 페이지가 올바르게 표시되지 않지만 파트너가 소비하려면 WSDL 경로를 직접 넘겨 주시겠습니까? vs 페이지로 보내어 –

+0

wsdl이 잘못된 URL로 생성됩니다. 따라서 '해결책'은 수동으로 wsdl을 가져 와서 디렉토리로 업로드하고 새 경로를 제공하는 것입니다. – Victor

21

블로그 포스트 Using Request Headers for Metadata Address
Victoranswer와 비슷하지만, 기본 포트는 선택 사항이며 생략 할 수 있다고 설명 :

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior> 
      <useRequestHeadersForMetadataAddress/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

또한 코드의 동작을 사용하는 방법을 보여줍니다.

sh.Description.Behaviors.Add(new UseRequestHeadersForMetadataAddressBehavior()); 
+2

장엄한! 고마워! – Jeremy

+2

정말 고마워요. – Enzero

관련 문제