문제

WCF 응용 프로그램의 작동 폴더를 얻고 싶습니다. 어떻게 얻을 수 있습니까?

내가 시도하면

HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)

Null 참조 예외를 얻습니다 (http.current 객체는 null).


작동 폴더와 관련된 것은 WCF 서비스가 실행중인 폴더였습니다. 내가 설정하면 aspNetCompatibilityEnabled="true", 나는이 오류를 얻는다 :

서버는 의미있는 답변을 제공하지 않았습니다. 이는 계약 불일치, 조기 세션 종료 또는 내부 서버 오류로 인해 발생할 수 있습니다.

도움이 되었습니까?

해결책

IIS6 호스팅 WCF 응용 프로그램에 대해 동일한 정보가 필요했고 이것이 나에게 효과가 있음을 알았습니다.

string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

항상 그렇듯이 YMMV.

다른 팁

아래의 Ongle의 답변을 참조하십시오. 이 것보다 훨씬 낫습니다.

더 많은 정보 후에 업데이트되었습니다

다음은 나를 위해 일했습니다. 서비스 1.SVC를 통해 IIS에서 호스팅 한 새로운 WCF 서비스로 테스트했습니다.

  1. 추가하다 <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 웹 구성에. <system.serviceModel>..</ ..> 이미 존재했습니다.
  2. 추가하다 AspNetCompatibilityRequirementsAttribute 모드가 허용되는 서비스에.
  3. 사용 HttpContext.Current.Server.MapPath("."); 루트 디렉토리를 얻으려면.

아래는 서비스 클래스의 전체 코드입니다. iservice1 인터페이스를 변경하지 않았습니다.

[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
    public void DoWork()
    {
        HttpContext.Current.Server.MapPath(".");
    }
}

아래는 web.config에서 발췌 한 것입니다.

<system.serviceModel>
    <!-- Added only the one line below -->
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

    <!-- Everything else was left intact -->
    <behaviors>
        <!-- ... -->
    </behaviors>
    <services>
        <!-- ... -->
    </services>
</system.serviceModel>

오래된 대답

작업 폴더는 무엇을 의미합니까? WCF 서비스는 여러 가지 방법으로 호스팅 될 수 있으며 다른 엔드 포인트로 작업 폴더가 약간 모호합니다.

호출로 일반 "작동 폴더"를 검색 할 수 있습니다. directory.getCurrentDirectory ().

httpcontext는 asp.net 객체입니다. WCF가 IIS에서 호스팅 될 수 있더라도 여전히 ASP.NET이 아니며 이러한 이유로 대부분의 ASP.NET 기술은 기본적으로 작동하지 않습니다. OperationContext는 WCF의 HTTPContext와 동일합니다. OperationContext에는 들어오는 요청에 대한 정보가 포함되어 있습니다.

가장 쉬운 방법은 서비스를 실행하는 것입니다. ASP.NET 호환성 모드 Web.config에서 토글링하여. 이를 통해 ASP.NET httpContext에 액세스 할 수 있습니다. 그래도 *httpbindings 및 IIS 호스팅으로 제한합니다. 호환성 모드를 전환하려면 다음을 web.config에 추가하십시오.

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>

당신이 원하는 것에 따라. 일반적으로 "~/폴더/파일"과 같은 URL을 해결하고 싶습니다. 이것이 효과가있는 것입니다.

System.Web.Hosting.HostingEnvironment.MapPath("~/folder/file");

더 일반적으로, 나는 이것을 사용하고 있습니다

AppDomain.CurrentDomain.BaseDirectory

aspnetCompatibilityEnabled = "True"는 내 문제를 해결해야했지만이 오류가 발생했습니다.

서버는 의미있는 답변을 제공하지 않았습니다. 이는 계약 불일치, 조기 세션 종료 또는 내부 서버 오류로 인해 발생할 수 있습니다.

현재 앱 도메인에서 가져 와서 WCF 서비스의 물리적 경로를 얻는 데 문제가 해결되었습니다.

AppDomain.CurrentDomain.BaseDirectory

HTTPContext 객체와 같은 ASP.NET 기능을 참조하려면 ASP.NET 호환 모드에서 WCF 앱을 실행해야합니다. 이것 기사 이 작업을 수행하는 방법을 설명합니다.

WCF의 HostingEnvironment.applicationPhysicalPath를 사용하여 응용 프로그램 물리적 경로를 찾으십시오. system.web.hosting을 사용하여 네임 스페이스를 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top