2016-04-14 14 views
1

私はこれにかなり限界を設けています。 Visual Studio 2013を使用してローカルで実行すると動作するWCFサービスがあります。私はWPFアプリケーションからサービスを呼び出しています。WCFサービスが内部サーバーエラーを発生します

設定の設定を指しているように見える他のスレッドを確認しましたが、私は運が悪いと試しました。

私のサービスのコードは次のとおりです。

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceContract] 
public class VerificationRequest 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "send", RequestFormat = WebMessageFormat.Json)] 
    public Stream Send(PatientVerificationRequest data) 
    { 
     try 
     { 
      using (StreamWriter sw = File.AppendText("RequestLog")) 
      { 
       sw.WriteLine("Request Received"); 
      } 

      if (data == null) 
      { 
       return new MemoryStream(Encoding.UTF8.GetBytes("<html><body>Post Successful</body></html>")); 
      } 

      // Put back into json format 
      string json = JsonConvert.SerializeObject(data); 

      using (StreamWriter sw = File.AppendText("RequestLog")) 
      { 
       sw.WriteLine(json); 
      } 

      // Log the request to the database 
      // First, the actual json string 
      var jsonId = PhoenixProcedure.CreateCloudVerificationRequest(json); 
      var cvrId = PhoenixProcedure.CreateCloudVerificationRequest(data); 

      if (WebOperationContext.Current != null) 
      { 
       WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK; 
       WebOperationContext.Current.OutgoingResponse.ContentType = "text/html"; 
      } 

      return new MemoryStream(Encoding.UTF8.GetBytes("<html><body>Post Successful</body></html>")); 
     } 
     catch (Exception ex) 
     { 
      Logger.Instance.WriteEvent(new LogEntry 
      { 
       Application = "DocumentVerification", 
       EntryType = LoggingEventType.Error, 
       Error = ex, 
       Message = "Error Sending Verification Request", 
       Source = "Send", 
       SystemUserId = 8 
      }); 
     } 

     return null; 
    } 

次に、web.configの重要な設定を示します。ここで

 <system.serviceModel> 
<bindings> 
    <webHttpBinding> 
    <binding name="http" maxBufferSize="20971520" maxBufferPoolSize="20971520" maxReceivedMessageSize="20971520"> 
     <readerQuotas maxDepth="32" 
      maxArrayLength="200000000" 
      maxStringContentLength="200000000"/> 
    </binding> 
    </webHttpBinding> 
    <basicHttpBinding> 
    <binding name="efHttp" maxReceivedMessageSize="20000000" 
     maxBufferSize="20000000" 
     maxBufferPoolSize="20000000"> 
     <readerQuotas maxDepth="32" 
      maxArrayLength="200000000" 
      maxStringContentLength="200000000"/> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service name="DocVerify.VerificationRequest" behaviorConfiguration="ServiceBehavior"> 
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="http" name="http" contract="DocVerify.VerificationRequest"/> 
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"/> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
     <serviceMetadata httpGetEnabled="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 

App.configファイルは、呼び出し元のアプリケーションです。

<system.serviceModel> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="WCFHttpBehavior"> 
     <callbackDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    <behavior name="webhttp"> 
     <webHttp/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpBinding> 
    <binding name="WCFHttpBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"> 
     <readerQuotas maxArrayLength="2147483647" maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" /> 
    </binding> 
    </basicHttpBinding> 
    <webHttpBinding> 
    <binding name="WCFWebBinding" openTimeout="00:10:00" closeTimeout="00:10:00" sendTimeout="00:10:00" receiveTimeout="00:30:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    <binding name="VerificationBinding" allowCookies="true" 
      maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000"> 
     <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/> 
    </binding> 
    </webHttpBinding> 
</bindings> 
<client> 
    <endpoint address="http://PSICTSWEB01:65530/DocVerify/VerificationRequest.svc" 
      binding="webHttpBinding" bindingConfiguration="VerificationBinding" 
      contract="DocVerify.VerificationRequest" 
      behaviorConfiguration="webhttp"/> 
</client> 

そして、最後に、コードは、サービスを呼び出します。

  DocVerify.VerificationRequest rs = new VerificationRequestClient(); 
     rs.Send(new PatientVerificationRequest 
     { 
      request_type = (int)PatientVerificationRequestType.Full, 
      patient_id = 120053, 
      fname = "FirstName", 
      lname = "LastName", 
      gender = "M", 
      dob_month = 2, 
      dob_day = 14, 
      dob_year = 1982, 
      address1 = "10 Main St.", 
      city = "Hampton", 
      state = "VA", 
      zipcode = "23669", 
      reported_income = 54000, 
      primary_insurance_name = "United Health Care", 
      primary_policy_number = "PN123456", 
      primary_group_number = "GN67890", 
      primary_policy_holder_fname = "FirstName", 
      primary_policy_holder_lname = "LastName" 
     }); 

サービスが呼び出されるとすぐにログが作成されます。ログファイルは決して作成されないので、実際の呼び出しが行われる前にエラーがスローされますが、rs.Send()メソッドでエラーが発生します。

サーバーのアクセス許可をチェックして、ログファイルを作成するためのアクセス許可が正しいことを確認しました。設定ファイルは大丈夫ですが、明らかに間違っています。誰にもアイデアはありますか?

NEW INFO:私は、WCFトレースをオンにし、このエラーを取得しています:

<binding name="VerificationBinding" allowCookies="true" 
      maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000"> 
     <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/> 
    </binding> 
<service name="DocVerify.VerificationRequest" behaviorConfiguration="ServiceBehavior"> 
    <endpoint address="http://PSICTSWEB01:65530/DocVerify/VerificationRequest.svc" 
       binding="webHttpBinding" bindingConfiguration="VerificationBinding" name="VerificationBinding" contract="DocVerify.VerificationRequest" behaviorConfiguration="webhttp"/> 
    </service> 

The message with To ' http://psictsweb01.psi.pri:65530/DocVerify/VerificationRequest.svc/Send ' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree.

は、この情報を使用して、私はweb.configファイルのエンドポイント情報を変更しましたアプリケーションでは、バインドとエンドポイントは次のとおりです。

<binding name="VerificationBinding" allowCookies="true" 
      maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000"> 
     <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/> 
    </binding> 
<endpoint address="http://PSICTSWEB01:65530/DocVerify/VerificationRequest.svc" 
      binding="webHttpBinding" bindingConfiguration="VerificationBinding" 
      contract="DocVerify.VerificationRequest" 
      behaviorConfiguration="webhttp"/> 

エンドポイントが一致します。私は間違って何をしていますか?

+1

このエラーが発生したWebサーバーのWindowsイベントログを調べると、完全なスタックトレースを持つエラーを示すエントリがアプリケーションログに表示されます。また、wcfのロギングを有効にすることもできます。 – Wjdavis5

+0

フォルトの例外が含まれているので、あなたに役立つ追加情報が必要です。便利な記事http://www.codeprojectがあります。com/Articles/799258/WCF-Exception-FaultException-FaultContract –

+0

サービスにWCFログを追加しました。素晴らしいアイデアをありがとう!ログは、エンドポイントが一致しないと私に伝えていますが、私はそれらがそうだと思います。私は情報を示すセクションコール "NEW INFO"で投稿を編集しました。まだそれに取り組んでいるが、まだ失われている。 –

答えて

0

私はこれが実際にこの質問に答えるとは思わないが、私は働くサービスを得た。まず、私はWebサイトとしてサービスを作りました。私はそれをやるべきではないと思っています。しかし、これにより、エンドポイント・アドレス・マッチングの必要性がなくなりました。次に、プロジェクトに新しい.svcファイルを作成すると、デフォルトでインターフェイスクラスが作成されます。もともと、私はそのクラスを削除しました。私はテストサービスクラスを作成し、今回はインターフェイスを維持し、サービスは正常に動作しました。

ここで何が間違っているのか分からない限り、来週から始めてゆっくりとビルドプロセスを進め、どこで私がプッシュを締め付けたのかを知る必要があるかもしれません。

関連する問題