2017-12-27 36 views
2

PCL 프로젝트로 .netstandard 2.0을 사용하여 Xamarin.Forms 프로젝트를 만들었습니다. 해당 프로젝트에서 WCF 서비스를 사용하려고합니다. WCF 서비스에 연결된 서비스를 추가했습니다.Xamarin.Forms 프로젝트에서 .netstandard의 WCF 서비스를 사용하는 방법은 무엇입니까?

System.ServiceModel.FaultException`1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Error in deserializing body of request message for operation 'GetData'. OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name 'GetData' and namespace ' http://tempuri.org/ '. Found node type 'Element' with name 'GetDataAsync' and namespace ' http://tempuri.org/ '

가 나는 또한 이전 버전에 .netstandard 버전을 변경하려고했지만이 같은 오류를 제공합니다 : I는 서비스에서 제공하는 메소드를 호출하기 위해 노력하고있어 때 아래와 같은 오류를 제공합니다.

+0

오류는 몸의 모양이 잘못된 것이 아니라하지 구현하는 방법입니다 제안한다. 모델이 맞습니까? – Neil

+0

@ 네일 예. 모델이 정확합니다. 사실 GetData 메서드는 Visual Studio의 WCF 서비스 공급자에 의해 생성 된 프록시 클래스에 문제가있을 수 있습니다. – vishgarg

+0

안녕하세요! Xamarin이 작업 기반 비동기 WCF 프록시 메서드와 호환되는지 알고있는 사람 있습니까? 고맙습니다. – Ignacio

답변

2

현재 Xamarin 응용 프로그램은 WCF Web Service Reference 연결된 서비스 공급자가 .NET 표준 프로젝트 (bugzilla.xamarin.com Bug 51959)에 대해 생성하는 작업 기반 비동기 WCF 프록시 메서드와 호환되지 않습니다. WCF 프록시 방법의 이전, 호환 스타일을 생성하는

한 가지 방법은 Developer Command Prompt에서 /async/tcv:Version35 스위치 SvcUtil.exe를 실행하는 것입니다. 이를 통해 동기식 프록시 메소드, 시작/종료 스타일 비동기 프로그래밍 모델 (APM) 콜백 프록시 메소드 및 이벤트 기반 프록시 메소드가 생성되며이 메소드는 모두 Xamarin 애플 리케이션과 호환됩니다.

(참고 :. 당신이 /async 스위치를 생략하는 경우, SvcUtil.exe이 새로운 호환되지 않는 작업 기반의 프록시 방법을 생성합니다)

+0

난 비주얼 스튜디오 2017로 이전 옵션을 사용하여 프록시 클래스를 생성하는 옵션이 없다고 생각 svcutil.exe 다시 비동기/스타일 프록시 메서드를 기다리고 – vishgarg

+0

흠. 아마도'/ tcv : Version35' 옵션을 명시 적으로 전달할 수도 있습니다. [documentation] (https://docs.microsoft.com/dotnet/framework/wcf/servicemodel-metadata-utility-tool-svcutil-exe)에 따르면 : "/ tcv : Version35와 함께/async를 사용할 때 '스위치, 이벤트 기반 및 콜백/대리자 기반 비동기 메서드가 모두 생성됩니다. " C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.1 Tools \ SvcUtil.exe'에 대한 빠른 테스트에서 원하는 콜백 및 이벤트 기반 방법을 얻었습니다. –

+1

아 하. '/ async' 플래그를 생략하면 기본적으로 작업 기반 메소드가 동기 메소드와 함께 포함됩니다. 이 문제를 설명하고'/ tcv : Version35' 플래그를 언급하기 위해 내 답변을 편집 할 것입니다. 그 이유는 이벤트 기반 메소드를 얻는 데 필요하기 때문입니다. –