[wcf] 이는 HTTP 프로토콜을 사용하지 않는 서비스 엔드 포인트 바인딩 때문일 수 있습니다.

내 로컬 컴퓨터에서 WCF 서비스가 제대로 실행되고 있습니다. 서버에 저장했는데 다음과 같은 오류가 발생합니다.

http : //xx.xx.x.xx : 8200 / Services / WCFClient.svc에 대한 HTTP 응답을 수신하는 중에 오류가 발생했습니다
. 이는 HTTP 프로토콜을 사용하지 않는 서비스 엔드 포인트 바인딩 때문일 수 있습니다. 이는 서버에서 HTTP 요청 컨텍스트를 중단했기 때문일 수도 있습니다 (서비스 종료로 인해). 자세한 내용은 서버 로그를 참조하십시오.]

URL의 서비스로 이동했으며 제대로 작동하고 있습니다. 함수에 대해 내가하는 일은 이미지 이름에 문자열을 반환하는 것이므로 전달되는 데이터가 많지 않습니다. 나는 로그를 추적했으며 동일한 정보를 제공합니다. 내 클라이언트 구성은 다음과 같습니다.

<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
         messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
         allowCookies="false">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
                  maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
                  maxNameTableCharCount="2147483647" />
    <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
</binding>
<endpoint name="basicHttpBinding_IWCFClient" 
    address="http://localhost:4295/Services/WCFClient.svc"
    binding="basicHttpBinding" 
    bindingConfiguration="basicHttpBinding_IWCFClient" 
    behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior"
    contract="WCFClient.IWCFClient" />

내 서버 구성은 다음과 같습니다.

<service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior"
    name="WCFGraphicManagementTool.Services.WCFClient">
   <endpoint name="basicHttpBinding_IWCFClient"
       address="" 
       binding="basicHttpBinding" 
       contract="WCFGraphicManagementTool.Contracts.IWCFClient" />
   <endpoint 
       address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" />
</service>
<behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior">
   <dataContractSerializer maxItemsInObjectGraph="2147483647" />
   <serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120"
                      maxConcurrentInstances="120" />
   <serviceMetadata httpGetEnabled="true" />
   <serviceDebug includeExceptionDetailInFaults="true" />
</behavior>

내 로컬 컴퓨터에서 작동하므로 서버의 설정일까요?



답변

직렬화 문제가 있다고 생각합니다. 정확한 오류는 <configuration>섹션의 서비스 구성에 아래 코드를 추가하면됩니다 .

구성 업데이트 "App_tracelog.svclog"파일이 생성되면 서비스가 존재하는 곳에서 .svclog파일 을 열고 왼쪽 패널에서 오류 인 빨간색 선을 찾아 자세한 정보를 보려면 설명을 참조하십시오.

이것이 귀하의 오류를 찾는 데 도움이되기를 바랍니다.

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
      <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
      <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" />
    </sharedListeners>
  </system.diagnostics>


답변

“이것은 HTTP 프로토콜을 사용하지 않는 서비스 끝점 바인딩 때문일 수 있습니다”라는 문제가 발생했으며 WCF 서비스가 종료됩니다 (개발 컴퓨터에서)

나는 알아 냈습니다. 제 경우에는 문제가 Enums 때문이었습니다.

나는 이것을 사용하여 해결했다.

    [DataContract]
    [Flags]
    public enum Fruits
    {
        [EnumMember]
        APPLE = 1,
        [EnumMember]
        BALL = 2,
        [EnumMember]
        ORANGE = 3

    }

DataContract, Flags 및 EnumMember 특성을 사용하여 모든 열거 형 멤버를 사용하여 Enum을 장식해야했습니다.

msdn 참조를 살펴본 후이 문제를 해결했습니다 .


답변

나는 이와 같은 오류가 있었고 문제는 직렬화였습니다. Service Trace Viewer http://msdn.microsoft.com/en-us/library/ms732023.aspx를 사용하여 실제 문제를 찾아서 쉽게 해결했습니다. 아마도 이것은 누군가를 도울 것입니다.


답변

제 경우에는 복합 유형 중 하나에 set 메서드가없는 속성이 있기 때문에 오류가 발생했습니다.

그 사실 때문에 serializer에서 예외가 발생했습니다. 내부 설정 방법을 추가했으며 모두 잘 작동했습니다.

왜 이런 일이 발생하는지 알아내는 가장 좋은 방법은 (내 의견으로는) 추적 로깅을 활성화하는 것입니다.

다음 섹션을 내에 추가하여이를 달성했습니다 web.config.

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing">
      <listeners>
        <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "c:\log\Traces.svclog" />
        <add type="System.Diagnostics.DefaultTraceListener" name="Default" />
      </listeners>
    </source>
    <source propagateActivity="true" name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
      <listeners>
        <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "c:\log\Traces.svclog" />
        <add type="System.Diagnostics.DefaultTraceListener" name="Default" />
      </listeners>
    </source>
  </sources>
  <trace autoflush="true" />
</system.diagnostics>

일단 설정되면 클라이언트를 실행하고 예외가 발생하고 ‘Traces.svclog’파일을 확인했습니다. 거기에서 나는 예외를 찾기 만하면되었다.


답변

DataContract의 솔루션 인 Flags for Enums는 약간보기 흉해 보입니다. 제 경우에는 “NotSet = 0″과 같은 것을 열거 형에 추가하여 문제가 해결되었습니다.

public enum Fruits
{
  UNKNOWN = 0,
  APPLE = 1,
  BALL = 2,
  ORANGE = 3
}


답변

나는 같은 문제에 직면했고 아래 코드로 해결되었습니다. (TLS 연결 문제가있는 경우)

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

클라이언트 채널을 열기 전에이 줄을 붙여 넣으십시오.


답변

개체 그래프의 순환 참조로 인해이 오류가 발생하는 것을 보았습니다. 자식에서 부모 개체에 대한 포인터를 포함하면 serializer가 루프되고 궁극적으로 최대 메시지 크기를 초과합니다.