0

我对 c# 完全陌生。 对不起

我正在尝试创建一个 WCF Rest 服务来获取文件并将其放置在 Web 服务器上。以下操作效果很好:

         [OperationContract]
    [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "GetMediaFile?shopNumber={shopNumber}&fileName={fileName}")]
    Stream GetMediaFile(string shopNumber, string fileName);

一切都按预期工作,直到我添加以下操作

 [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat =        WebMessageFormat.Json, UriTemplate = "PutMediaFile?shopNumber={shopNumber}&fileName={fileName}")]
    string PutMediaFile(string shopNumber, string fileName, Stream mediaFile);

我通过单击启动安装服务的工具的绿色箭头来安装服务。我需要这样做才能从我的 IOS 设备上对其进行测试。

问题是,一旦我添加了 POST 方法,在服务安装过程中就会出现以下错误:

 "Failed to add a service. Service metadata may not be accessible. Make sure your service is running and exposing metadata"

接下来是更深入的解释:

 "Error: Cannot obtain Metadata from http://localhost/MpiPhotoStore/PhotoStoreService.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.  For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error    URI: http://localhost/MpiPhotoStore/PhotoStoreService.svc    Metadata contains a reference that cannot be resolved: 'http://localhost/MpiPhotoStore/PhotoStoreService.svc'.    There was no endpoint listening at http://localhost/MpiPhotoStore/PhotoStoreService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.    The remote server returned an error: (404) Not Found.HTTP GET Error    URI: http://localhost/MpiPhotoStore/PhotoStoreService.svc    There was an error downloading 'http://localhost/MpiPhotoStore/PhotoStoreService.svc'.    The request failed with the error message:--<HTML><HEAD><STYLE type="text/css">#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em; MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR: #000000; FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP: 0px; MARGIN-BOTTOM: 12px; COLOR: #000000; FONT-FAMILY: Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; PADDING-LEFT: 5px; FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: 26px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; MARGIN-LEFT: -30px; WIDTH: 100%; COLOR: #ffffff; PADDING-TOP: 10px; FONT-FAMILY: Tahoma; BACKGROUND-COLOR: #003366}.intro{MARGIN-LEFT: -15px}</STYLE><TITLE>Service</TITLE></HEAD><BODY><DIV id="content"><P class="heading1">Service</P><BR/><P class="intro">The server was unable to process the request due to an internal error.  For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.</P></DIV></BODY></HTML>--."

就像我说的,我有 2 个 GET 操作和 1 个 DELETE 操作,它们都可以正常工作。

这是我的 Web.Config

 <?xml version="1.0"?>
 <configuration>

 <appSettings>
 <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
 <add key="RootFilePath" value="\\OMMACDEV02VM1\Images"/>
 </appSettings>
 <system.web>
  <compilation debug="true" targetFramework="4.0" />
  </system.web>
 <system.serviceModel>
 <protocolMapping>
  <add scheme="http" binding="webHttpBinding"/>
 </protocolMapping>
 <behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>

    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior>
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

我已经阅读了有关 mex 端点的信息,但我现在真的只在看 JSON。Web.Config 适用于其他所有方法。

帮助!!!!!!!!!!!!!!

4

1 回答 1

0

问题出在 web.config 文件中:

 <?xml version="1.0"?>
 <configuration>
<appSettings>
 <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
<add key="RootFilePath" value="\\OMMACDEV02VM1\Images"/>
</appSettings>
<system.web>
    <compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
  <webHttpBinding>
    <binding maxReceivedMessageSize="10485760" />
  </webHttpBinding>
</bindings>
<services>
  <service name="MpiPhotoStore.PhotoStore" behaviorConfiguration="ServiceBehaviour">
    <endpoint address ="" binding="webHttpBinding" contract="MpiPhotoStore.IPhotoStoreService" behaviorConfiguration="web">
    </endpoint>
    </service>
  </services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
</system.serviceModel>
 </configuration>
于 2013-04-05T22:40:45.210 回答