wcf 응용 프로그램의 작업 경로를 얻는 방법은 무엇입니까?
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의 답변을 참조하십시오. 이것보다 훨씬 낫습니다.
추가 정보 후 업데이트 됨
다음은 나를 위해 일했습니다. Service1.svc를 통해 IIS에서 호스팅하는 새로운 WCF 서비스로 테스트했습니다.
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
웹 구성에 추가하십시오 .<system.serviceModel>..</ ..>
이미 존재했습니다.AspNetCompatibilityRequirementsAttribute
모드 허용으로 서비스에 추가하십시오 .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>
이전 답변
Working Folder는 무엇을 의미합니까? WCF 서비스는 여러 다른 방법과 다른 끝점으로 호스팅 될 수 있으므로 작업 폴더가 약간 모호합니다.
Directory.GetCurrentDirectory ()를 호출하여 일반 "작업 폴더"를 검색 할 수 있습니다 .
HttpContext는 ASP.Net 개체입니다. WCF가 IIS에서 호스팅 될 수 있더라도 여전히 ASP.Net이 아니기 때문에 대부분의 ASP.Net 기술이 기본적으로 작동하지 않습니다. OperationContext는 WCF의 HttpContext에 해당합니다. OperationContext는 들어오는 요청, 나가는 응답에 대한 정보를 포함합니다.
가장 쉬운 방법은 web.config에서 서비스를 전환 하여 ASP.Net 호환 모드 에서 서비스를 실행하는 것입니다. 이렇게하면 ASP.Net HttpContext에 액세스 할 수 있습니다. 하지만 * HttpBindings 및 IIS 호스팅으로 제한됩니다. 호환 모드를 전환하려면 web.config에 다음을 추가하십시오.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
당신이 원하는 것에 따라. 보통 "~ / folder / file"과 같은 URL을 확인하고 싶습니다. 이것이 효과가있는 것입니다.
System.Web.Hosting.HostingEnvironment.MapPath("~/folder/file");
좀 더 일반적으로 이걸 사용하고 있습니다
AppDomain.CurrentDomain.BaseDirectory
The aspNetCompatibilityEnabled="true" should have resolved my problem, but I got this error:
The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error.
I resolved my problem with getting the physical path of my running WCF service by getting it from my current app domain:
AppDomain.CurrentDomain.BaseDirectory
In order to reference ASP.NET features like the HttpContext object, you need to run your WCF app in ASP.NET compatibility mode. This article explains how to do this.
Use HostingEnvironment.ApplicationPhysicalPath in WCF to find your application physical path. Use namespace using System.Web.Hosting;
참고URL : https://stackoverflow.com/questions/791468/how-to-get-working-path-of-a-wcf-application
'IT박스' 카테고리의 다른 글
Windows 명령 프롬프트를 사용하여 빈 폴더를 삭제하는 방법은 무엇입니까? (0) | 2020.11.06 |
---|---|
레일의 정의되지 않은 메소드`devise_for ' (0) | 2020.11.06 |
런타임에 iPhone 앱의 제품 이름을 얻습니까? (0) | 2020.11.06 |
Nexus 5에는 어떤 USB 드라이버를 사용해야합니까? (0) | 2020.11.06 |
신속한 presentViewController (0) | 2020.11.06 |