MessageContract를 사용하지 않고 파일을 업로드 할 수있는 WCF 서비스가 있습니다.WebHttpBinding을 사용하는 WCF 서비스에 대한 'app.config'정의
[OperationContract, WebInvoke(UriTemplate = "UploadFile?filename={filename}")]
bool UploadFile(string filename, Stream fileContents);
Stream 개체 옆에 다른 매개 변수를 사용할 수 있습니다.이 개체는 UriTemplate의 일부이기 때문에 사용할 수 있습니다. 서비스가 Managed Windows Service로 실행되므로 ServiceHost를 수동으로 시작해야합니다.
protected override void OnStart(string[] args)
{
FileServiceHost = new ServiceHost(typeof(FileService), new Uri("http://" + Environment.MachineName + ":8000/FileService"));
FileServiceHost.AddServiceEndpoint(typeof(IFile), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());
FileServiceHost.Open();
}
이 모든 것이 서비스가 시작되어 제대로 작동합니다. 그러나 위의 일부를 app.config 파일로 옮기고 싶었습니다. 이렇게하려면 두 번째 줄 OnStart
을 주석 처리하고 첫 줄을 FileServiceHost = new ServiceHost(typeof(FileService))
으로 바꿨습니다. 그럼 난이 app.config에 해당 정보를 ... 추가
갑자기 서비스가 더 이상 시작할 수 없습니다
<system.serviceModel>
<services>
<service name="Test.Server.FileService" behaviorConfiguration="DefaultBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8000/FileService"/>
</baseAddresses>
</host>
<endpoint address="" binding="webHttpBinding" contract="IFile"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
. 이 예외는
OnStart
메서드의
FileServiceHost.Open
에 throw됩니다. "작업 UploadFile을 요청하는 경우 스트림으로 사용하려면 작업의 형식이 Stream 인 단일 매개 변수가 있어야합니다."
app.config에서 서비스를 정의하는 방식에 문제가있을 것입니다. 거기에서 제거하면 모든 것이 제대로 작동하기 때문입니다. 여기서 내가 뭘 잘못하고 있니?
: 다음과 같이
추가
<endpoint address="" binding="webHttpBinding" contract="IFile"/>
-behaviorConfiguration="TestBehavior"
, 그리고TestBehavior
을 정의했다. 어쨌든, 엔드 포인트에서'WebHttpBehavior'를 사용하면 문제가 해결되는 것 같습니다. – rafale잘 알고 있습니다. 당신은 당신의 질문에 대한 당신 자신의 대답을 게시하고 받아들이기를 원할 것입니다. –