WSDL URL을 내부 시스템 이름에서 공용으로 변경하는 방법은 무엇입니까?
Azure에 구축한 간단한 서비스가 있습니다.다음을 통해 액세스할 수 있습니다.
http://xxxxxxxxxxxxxxxxxxxxxxx.cloudapp.net/MyTestService.svc
WSDL의 URL은 공용 DNS 대신 내부 시스템 이름을 사용합니다.
svcutil.exe http://rd001520d328923a/MyTestService.svc?wsdl
분명히, WSDL은 이것으로 기계 외부에서 접근할 수 없습니다.
IIS에서 실행 중이거나 서비스 URL을 알고 있는 경우 변경할 수 있는 몇 가지 사항을 알고 있습니다.예를 들어 다음을 변경합니다.<serviceMetadata>
를 지정하도록 구성합니다.httpGetUrl
속성, 하지만 절대 URL을 포함해야 하므로 작동하지 않습니다.상대 URL을 사용하여 내부 시스템 이름을 계속 사용합니다.실제 문제는 WSDL에 기계 이름과 함께 URL 참조가 포함되어 있기 때문에 사용할 수 없다는 것입니다.
다음과 같은 두 가지 하위 표준 해결 방법이 있습니다.
WSDL을 가져다가 URL을 수정한 다음 다른 URL에서 액세스할 수 있도록 업로드할 수 있다는 제안이 있었습니다.
2010년 초의 핫픽스를 사용할 수 있었지만 더 나은 방법이 있을 것입니다.
컴퓨터 이름 대신 공용 DNS를 사용하려면 어떻게 해결할 수 있습니까?
알겠습니다. 저는 거의 일주일 동안 이것을 보고 있어요.드디어 답을 찾았습니다, 쉽게 구할 수 없기 때문에 저는 이것이 색인화되어 다른 사람들을 위해 시간을 절약하기를 바랍니다.
기본적으로 이러한 전반적인 동작은 WCF 3.0/3.5의 알려진 문제로, 이에 대해 핫픽스를 릴리스했습니다.자세한 내용은 여기에서 확인할 수 있습니다. FIX: WCF WSDL 문서에서 URI는 로드 밸런서 대신 액세스할 수 없는 내부 인스턴스를 참조합니다...
저는 연구하는 동안 이 문제를 몇 번 발견했지만, 대부분의 경우 Azure에 핫픽스를 배포하는 방법에 대해 전혀 알지 못했기 때문에 다시 생각해 본 적이 없습니다.
다행히 MSDN 포럼의 마이크로소프트 진행자는 이 문제가 .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>
그게 다였다.이 문제가 이제 해결되었다는 것이 더 명확했다면 훨씬 더 간단한 검색이었을 것입니다.아마도 나는 충분히 열심히 보이지 않았을 것입니다.
블로그 게시물 메타데이터 주소에 대한 요청 헤더 사용은 다음과 유사합니다.
Victor의 답변이지만 기본 포트는 선택 사항이며 생략할 수 있다고 설명합니다.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<useRequestHeadersForMetadataAddress/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
또한 코드에서 동작을 활성화하는 방법도 보여줍니다.
sh.Description.Behaviors.Add(new UseRequestHeadersForMetadataAddressBehavior());
WSDL을 게시하기 위해 WSDL을 생성하는 것입니까, 아니면 다른 프로젝트에 참조를 추가하려는 것입니까?
후자의 경우 "서비스 참조 추가"가 아닌 WCF Channel Factory 접근 방식을 사용하는 것이 좋습니다.저는 그것이 제게 더 일관적이고 통제 가능한 결과를 제공한다는 것을 알게 되었습니다.
http://msdn.microsoft.com/en-us/library/ms734681.aspx
덧붙이자면, 나는 Azure에서 이것을 시도해 본 적이 없습니다.
언급URL : https://stackoverflow.com/questions/5007270/how-to-change-wsdl-url-from-internal-machine-name-to-public
'programing' 카테고리의 다른 글
서버를 시작하는 동안 "Ruby 버전은 2.3.0이지만 Gem 파일이 2.2.5로 지정되었습니다."를 수정하는 방법 (0) | 2023.06.04 |
---|---|
Android에서 프로그래밍 방식으로 화면 밀도를 얻습니까? (0) | 2023.06.04 |
getContext(), getApplicationContext(), getBaseContext() 및 "이것"의 차이 (0) | 2023.06.04 |
이벤트 저장소 대몽고DB (0) | 2023.06.04 |
NULL 열에 고유 인덱스를 만드는 방법은 무엇입니까? (0) | 2023.06.04 |