2016-07-25 5 views
0

私は、この問題がすでに多くの時間にわたって議論されてきたことを完全に認識していますが、それは自分のプロジェクトの特定の構成であり、私はこの問題であなたの助けを求める。私のばかげたエラーを間違えて、私はWCFとRESTのサービスには一般的に非常に新しいです。WCF - MVCクライアントを消費するWCFサービスを正しく設定する方法

基本的に、私はIISサーバー上でホストされているWCF RESTサービスを消費するMVCアプリケーションを作成したいと考えています。

私は、次のサービス契約でWCFサービスアプリケーションを作成しました:

[ServiceContract] 
public interface IUserService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     RequestFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "/ListaUtilizatori/")] 
    DataSet ListaUtilizatori(); 

    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     RequestFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "/DetaliiUtilizator/{id}")] 
    DataSet DetaliiUtilizator(String id); 


    [OperationContract] 
    [WebInvoke(Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     RequestFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "/AdaugaUtilizator")] 
    String AdaugaUtilizator(Utilizator utilizator); 

    [OperationContract] 
    [WebInvoke(Method = "PUT", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "/ActualizeazaUtilizator")] 
    String ActualizeazaUtilizator(Utilizator utilizator); 

    [OperationContract] 
    [WebInvoke(Method = "DELETE", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "/StergeUtilizator/{id}")] 
    String StergeUtilizator(String id); 
} 

私が正しくメソッドを実装し、私のようなサービスモデルを構成しweb.configファイルに:

<system.serviceModel> 
    <services> 
     <service name="RESTService.UserService" behaviorConfiguration="RESTServiceBehaviour"> 
     <endpoint address="" binding="webHttpBinding" bindingConfiguration="WebHttpBinding_IUserService" contract="RESTService.IUserService" behaviorConfiguration="RESTEndpointBehavior"></endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors>   
     <behavior name="RESTServiceBehaviour"> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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="true"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="RESTEndpointBehavior"> 
      <webHttp helpEnabled="True"/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <bindings> 
     <webHttpBinding> 
     <binding name="WebHttpBinding_IUserService" /> 
     </webHttpBinding> 
    </bindings> 
    <protocolMapping> 
     <add binding="webHttpBinding" scheme="http" /> 
    </protocolMapping>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

その後、IISサーバーにWCFアプリケーションを公開しました。期待されたJSON形式の応答をブラウザで返すだけでうまくいきました。

公開されたWCFサービスへのサービス参照を追加したMVCアプリケーションを作成し、UserServiceReferenceという名前を付けました。不思議、何system.serviceModelノードを追加したり、構成MVCのweb.configに、私は手動で次のように加えた:

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="RESTEndpoint"> 
      <webHttp helpEnabled="true"/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <bindings> 
     <webHttpBinding> 
     <binding name="WebHttpBinding_IUserService" />   
     </webHttpBinding>  
    </bindings> 
    <client> 
     <endpoint address="http://localhost/RESTUserService/UserService.svc" binding="webHttpBinding" bindingConfiguration="WebHttpBinding_IUserService" 
       behaviorConfiguration="RESTEndpoint" contract="UserServiceReference.IUserService" name="WebHttpBinding_IUserService" /> 
    </client> 
</system.serviceModel> 

それから次のコードでアプリのコントローラのいずれかにクライアントを作成することによって、機能をテストしようとしました。

[WebException: The remote server returned an error: (404) Not Found.] System.Net.HttpWebRequest.GetResponse() +1390 System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout) +55 

[EndpointNotFoundException: There was no endpoint listening at http://localhost/RESTUserService/UserService.svc/DetaliiUtilizator that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.] 
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +153 



System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +336 
    MVCApp.UserServiceReference.IUserService.DetaliiUtilizator(String id) +0 
    MVCApp.UserServiceReference.UserServiceClient.DetaliiUtilizator(String id) in D:\F5IT\PROJECT\RESTService\MVCApp\Service References\UserServiceReference\Reference.cs:308 
    MVCApp.Controllers.HomeController.Index() in D:\F5IT\PROJECT\RESTService\MVCApp\Controllers\HomeController.cs:34 
    lambda_method(Closure , ControllerBase , Object[]) +61 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +157 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22 
    System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225 
    System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26 
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9744373 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 
Source Error: 

Line 306:   
Line 307:  public System.Data.DataSet DetaliiUtilizator(string id) { 
Line 308:   return base.Channel.DetaliiUtilizator(id); 
Line 309:  } 
Line 310:  

私はコンパイルOとしてこれらのものを追加しました:私は私のアプリを実行すると、私はブラウザにこのエラーが出ます

UserServiceReference.UserServiceClient client = new UserServiceReference.UserServiceClient(); 
      DataSet ds = client.DetaliiUtilizator("2"); 
UserServiceReference.UserDataContractUtilizator utilizator = new UserServiceReference.UserDataContractUtilizator(); 

私が読んだすべての投稿。このコードでは、ある種のエラーでなければなりません。どうなり得るか?

ありがとうございました!

+0

エラー: '詳細については、InnerExceptionを参照してください。 ' –

+0

@JamieR例外をすべて追加しました。 – Ionna

+0

'http:// localhost/RESTUserService/UserService.svc/DetaliiUtilizator'が正しいエンドポイントですか? –

答えて

関連する問題