3

나는 더 큰 셰어 포인트 프로젝트에 통합되는 작은 셰어 포인트 프로젝트를 가지고 있습니다. 내 프로젝트는 두 가지 웹 서비스를 사용합니다. Web Reference (서비스 참조에 포함됨) 대화 상자를 사용하여 VS2010에 추가했습니다. 테스트 용 웹 서비스와 프로덕션 용 웹 서비스의 두 세트가 있습니다. 응용 프로그램을 로컬로 배포하면 웹 서비스 설정이 로컬 컴퓨터의 C:\inetpub\wwwroot\wss\VirtualDirectories\80\에있는 web.config 파일에 기록됩니다. 섹션은 다음과 같습니다. -App.Config의 웹 서비스 URL 변경

<applicationSettings> 
    <XXX.YYY.Properties.Settings> 
     <setting name="XXX_YYY_ZZZ_WS1" serializeAs="String"> 
     <value>http://<TEST_IPAddress>/WebService/WS1.asmx</value> 
     </setting> 
     <setting name="XXX_YYY_ZZZ_WS2" serializeAs="String"> 
     <value>http://<TEST_IPAddress>/WebService/WS2.asmx</value> 
     </setting> 
    </XXX.YYY.Properties.Settings> 
    </applicationSettings> 

테스트 웹 서비스와 프로덕션 웹 서비스의 차이점은 IP 주소뿐입니다. 프로덕션으로 IP 주소를 변경할 때 응용 프로그램이 새 값을 사용하고 있지 않습니다. VS로 돌아가서 Properties 대화 상자의 Web Reference URL을 올바른 제작 URL로 업데이트 한 다음 패키지를 다시 배포해야했습니다. 테스트에서 프로덕션 웹 서비스 URL로 지속적으로 전환하면서 계속 지루해집니다. app.config에서 IP 주소를 변경하고 브라우저에서 페이지를 새로 고치려면 새 URL을 선택해야합니다.

내가 잘못 했나요? 이것을 할 또 다른 방법이 있습니까?

답변

1

코드에서 webservice url을 변경하면 빌드 프로세스를 반복하지 않아도된다고 생각합니다. 당신은 우리가 지금처럼 이렇게이

WebServiceObjectName webService = new WebServiceObjectName(); 
webService.Uri = [IPaddress or DNS name] 
+0

혼란 스러울 수도 있습니다. 내가 게시 한 스 니펫 코드는 두 개의 TEST 웹 서비스의 URL입니다. 그것은 시험용과 생산 용이 아닙니다. 둘 다 TEST입니다. 프로덕션 IP로 변경할 수 있고 앱에서 자동으로 선택해야합니다. – tempid

+0

그런 다음 테스트 용 2 개, 프로덕션 용 2 개, 배포 유형을 가리키는 열쇠 1 개를 포함 할 수 있습니다. 즉, 라이브 테스트 – Adil

+0

귀하의 접근 방식을 이해하고 있지만이를 구현하는 방법에 대해서는 잘 모르겠습니다. Production에 대한''섹션에 두 개의 항목이 추가되기를 원하십니까? 정교하게 제발 주시겠습니까? 감사! – tempid

0

과 같이 변경할 수 있습니다

public static PublicWSClient Client() 
{ 
#if PRODUCTION 
    return new PublicWSClient("SvLive"); 
#else 
    return new PublicWSClient("SvTest"); 
#endif 
} 

처럼 호출됩니다 다음

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IPublicWS" 
       openTimeout="00:00:05" 
       sendTimeout="00:03:00" 
       receiveTimeout="00:10:00" 
       closeTimeout="00:00:30" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="262144" maxBufferPoolSize="524288" maxReceivedMessageSize="262144" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="131072" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="None"> 
       <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
       <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <!-- Production --> 
     <endpoint name="SvLive" address="http://sv.com/PublicWS/PublicWS.svc/PublicWS" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPublicWS" contract="SV.IPublicWS" /> 

     <!-- Test --> 
     <endpoint name="SvTest" address="http://staging.sv.com/PublicWS/PublicWS.svc/PublicWS" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPublicWS" contract="SV.IPublicWS" /> 
    </client> 
</system.serviceModel> 

이 웹 서비스에 대한 클라이언트 참조를 얻을 수 있습니다 :

var sv = PublicWSClient.Client(); 

이것은 사용자가 설명하는 수동 단계를 방지하고 테스트 및 라이브를 단일 구성 파일로 캡처 할 수 있도록합니다.