2011-01-02 2 views
5

나는이 같은 내 WCF 코드를 생성하는 svcutil.exe에 사용하고는 :SvcUtil.exe를 사용하여 서비스 구성 이름을 덮어 쓰지 않고 네임 스페이스를 어떻게 설정할 수 있습니까?

SvcUtil.exe http://www.MyServer.com:8080/MyService/mex /out:"C:\test.cs" /mc 

나는 /namespace 인수 (/namespace:*,MyNamespace)을 추가로 설정하면 나는 그것을 작동시킬 수 있지만, 그것은에 ConfigurationName 값을 덮어 씁니다 생성 된 인터페이스의 생성 ServiceContractAttribute : 나는 네임 스페이스를 설정하지 않은 경우

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] 
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="MyNamespace.MyServiceName")] 
public interface MyServiceName 
{ ... } 

ConfigurationName의 값 ("MyNamespace.MyServiceName"잘못 작동하지 않음) 올바른 "MyServiceName"입니다. 나는/ServiceName은 추가 시도했다 :이면 MyService 인수를하지만, 그것이

Error: The /serviceName: option conflicts with other options. Review your use of the tool.

가 어떻게이 ConfigurationName을 덮어 쓰지 않고 내 생성 된 클래스의 네임 스페이스를 지정할 수 있다고 하더군요?

답변

8

동일한 문제가 있습니다. VisualStudio.NET 2010을 통해 추가 할 때 생성 된 ConfigurationName = "MyWebService.MyWebServiceSoap"이있는 ServiceReference가 있습니다. svcutil을 사용하여 msbuild에서 동일한 클래스를 생성 할 때 svcutil은 ConfigurationName을 설정 한 값과 같게 설정하려고합니다. 네임 스페이스에 대한. 그래서이/N과 같이 속성을 설정 한 경우 :

/n:*,MyApplication.MyWebService.MyWebServiceSoap 

내가 내 생성 된 클래스에 대한 적절한 네임 스페이스를 얻을 수 있지만, ConfigurationName도 MyApplication.MyWebService.MyWebServiceSoap로 설정됩니다.

이것은 VS.NET이 svcutil을 사용하지 않는다는 것을 나타내는 것으로 보이며, posts이 표시되어있는 것으로 나타났습니다.

나는 더 나은 대답을 갖고 싶지만 MSBuild의 svcutil을 사용하고 있기 때문에 내 솔루션은 svcutil이 잘못된 ConfigurationName을 가진 클래스를 생성하고 FileUpdate 작업을 사용하여 정규식을 사용하여 해당 이름을 수정하도록했습니다. 다시 말하지만 이상적인 것은 아니지만 svcutil 문서에서 ConfigurationName을 지정할 수있는 내용을 볼 수 없습니다.

또한 serviceName 옵션은 컴파일 된 코드에서 메타 데이터를 내보내는 데 사용되며 클라이언트 프록시 클래스 생성에는 유효하지 않습니다. 이는 아마도 serviceName 옵션 충돌 오류가 발생한 이유 일 수 있습니다. http://msdn.microsoft.com/en-us/library/aa347733.aspx

2

하지 질문에 직접 대답하지만, 이름 공간의 변화가 당신을 위해 작동하지 않는 이유는 아마 당신이 서비스에 설정 계약 참조를 업데이트하는 것을 잊었다이다

을 참조하십시오. 귀하의 응용 프로그램/웹 설정에서

contract 속성에서

<client> 
    <endpoint .. contract="MyServiceName"> 
    </endpoint> 
</client> 

봐 찾습니다. svcutil에 네임 스페이스를 지정하지 않으면 MyServiceName이 생성되고 web.config에는 인터페이스 이름만으로 서비스 이름을 참조했습니다. 지금, 당신의 인터페이스는 네임 스페이스 내부에, 그래서 당신이 읽을 수있는 설정을 변경해야합니다 : 한마디로

<client> 
    <endpoint .. contract="MyNamespace.MyServiceName"> 
    </endpoint> 
</client> 

를 속성에 ConfigurationName 재산은 config 파일의 contract 속성에 네임 스페이스와 클래스 이름과 일치해야한다 . 키를 사용하여 일치하는 구성을 찾습니다.

관련 문제