2012-07-23 3 views
1

Azure 웹 역할로 호스팅되는 WCF 서비스를 만들려고합니다. 서비스는 비누로 휴식을 취할 수 있어야합니다.게시물로 WCF 휴면 종점에 연결할 수 없습니다.

저는 몇 가지 기사를 읽었으며 모든 사양을 갖춘 서비스를 만들 수있었습니다 (또는 적어도 그렇게 생각했습니다).

난 할 노력하고있어 모든 매개 변수와 쿼리 문자열과 POST를 수행하는 SoapUI 프로젝트 내 나머지 엔드 포인트를 소비하는 것입니다,하지만 난이 프로젝트를 실행할 때 내가 얻을 응답은 다음과 같습니다

서버에서 요청을 처리하는 중 오류가 발생했습니다. 예외 메시지는 'CPlano'작업에 대한 요청 메시지의 본문을 비 직렬화하는 중 오류입니다. OperationFormatter는 메시지가 비어 있기 때문에 메시지의 모든 정보를 deserialize 할 수 없습니다 (IsEmpty = true).

<bindings> 
    <webHttpBinding> 
    <binding name="webBinding" maxReceivedMessageSize ="50000000" maxBufferPoolSize="50000000"> 
     <readerQuotas maxDepth="500000000" maxArrayLength="500000000" maxBytesPerRead="500000000" 
        maxNameTableCharCount="500000000" maxStringContentLength="500000000"/> 
     <security mode="None" /> 
    </binding> 
    </webHttpBinding> 
</bindings> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="RestBehavior"> 
     <webHttp/> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <!-- 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="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<services> 
    <service name="Namespace.CService" behaviorConfiguration="ServiceBehavior"> 
    <endpoint name="RESTEnpoint" contract="Namespace.ICService" binding="webHttpBinding" bindingConfiguration="webBinding" bindingNamespace="http://www.example.com/" address="rest" behaviorConfiguration="RestBehavior" /> 
    <endpoint name="SOAPEndpoint" contract="Namespace.ICService" binding="basicHttpBinding" bindingNamespace="http://www.example.com/" address=""></endpoint> 
    </service> 
</services> 

또한 여기 내 서비스 인터페이스의 선언입니다 :

[ServiceContract(Namespace = "http://www.example.com/")] 
public interface ICService 
{ 
    [OperationContract] 
    [WebInvoke(UriTemplate = "/CPlano", 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    Method = "POST")] 
    RespuestaCotizador CPlano(int idUsuario, string usuario, string pass, int modalidad, int servicio, 
     int medicion, string paisDestino, int envio, decimal peso, decimal largo, decimal ancho, decimal alto); 
} 

그리고 마지막으로 내 대답 클래스는 다음과 같습니다

내의 Web.config의 일부

[DataContract(Namespace = "http://www.example.com/")] 
public class RespuestaCotizador 
{ 
    [DataMember] 
    public bool HasError; 
    [DataMember] 
    public string ErrorMessageESP; 
    [DataMember] 
    public string ErrorMessageENG; 
    [DataMember] 
    public decimal PrecioCotizado; 

    public RespuestaCotizador() 
    { 
     HasError = false; 
     ErrorMessageESP = string.Empty; 
     ErrorMessageENG = string.Empty; 
     PrecioCotizado = 0; 
    } 
} 

의존성 주입에 단결을 사용하고 있지만 이것은 n 인 것처럼 보입니다. 관련된.

서비스를 로컬에서 실행하는 경우에도 첫 번째 중단 점까지 도달 할 수 있습니다.

+0

SoapUI가 서비스 호출을 올바르게 설정하고 있는지 궁금한 예외 메시지가 표시됩니다. WCF가 메시지를 수신하고 들어오는 메시지를 CPlano 개체로 변경하려고 시도하지만 메시지에 정보가 없다고 생각하여 실패합니다. Visual Studio 또는 별도의 프로젝트와 함께 제공되는 WCFTestClient.exe를 사용하여 서비스를 테스트 해 보셨습니까? SoapUI가 문제가되는 것을 배제하기 위해 SoapUI 이외의 것이 있습니까? 또한 웹 프로젝트를 에뮬레이터 외부에서 실행 (Azure를 제외시키기 위해 시작 프로젝트로 설정)하십시오. – MikeWo

+0

안녕하세요. WCFTestClient 함께 시도했다 ...하지만 그것은 단지 비누 끝점 함께 서비스를 호출하는 생각 ...이 도구를 사용하여 서비스에서 올바른 대답을 받았습니다. – user1547073

+0

예, Ming Xu가 맞습니다. WCFTest 클라이언트는 REST 엔드 포인트를 테스트하지 않지만 SOAP 엔드 포인트가 올바르게 응답하면 서비스 자체에 문제가 없다는 것을 알았습니다. REST 엔드 포인트 또는 호출자가 문제가됩니다. 다른 도구 (Ming이 제안한 피들러 또는 다른 프로젝트)를 사용하면 어떻게됩니까? – MikeWo

답변

0

SOAP 또는 REST를 사용 하시겠습니까? SOAP를 사용하려면 BasicHttpBinding과 같은 다른 바인딩을 사용하십시오. WebHttpBinding은 일반적으로 REST 서비스에 사용됩니다. REST를 사용하려면 idUsuario 및 usuario와 같은 모든 것을 캡슐화하는 클래스를 만들 수 있습니다. 단일 매개 변수를 허용하도록 서비스 메소드를 구성하십시오. 새 클래스. 그런 다음 POST를 수행 할 때 직렬화 된 객체를 요청 본문으로 전달합니다. 또한 WCF 테스트 클라이언트를 사용하여 REST 서비스를 사용할 수 없습니다. SOAP 만 있습니다. 그러나 Fiddler를 사용할 수 있습니다. 또는 (새로운 서비스에 권장) WCF 대신 ASP.NET 웹 API를 사용하여 REST 서비스를 빌드하십시오.

관련 문제