나는 서버 - 클라이언트 애플리케이션에서 작업 중이다. 통신은 webservice webmethods를 사용하여 수행됩니다. 서버와 클라이언트 모두 C#으로 작성됩니다. 나는 며칠 동안 그것과 싸우고 있었지만 그것을 해결할 수 없었다.C#에서 SOAP로 웹 서비스를 통해 객체 전달하기
webservice를 통해 복잡한 클래스를 전송하는 데 문제가 있습니다. 지금까지 많은 것을 시도했지만 아무 것도 작동하지 않았습니다.
각각의 WebMethod
은 다음과 같습니다 ServiceResult 클래스 반환public class ServiceResult
{
public ResultStatus Status;
public object ResultObject;
public ServiceResult(ResultStatus status, object resultObject)
{
Status = status;
ResultObject = resultObject;
}
}
ResultStatus이 열거입니다, ResultObject 실제 반환 값입니다. 문제는 내가 웹 서비스를 통해 복잡한 수업을 보내려고했을 때였 다.
예를 들어, 개인 클래스가있는 추상 클래스 인 Job이 있습니다.
public abstract class Job : IComparable<Job>
{
public static readonly int DefaultDelay = 5000;
private int _jobID;
private int _referringID;
private JobType _jobType;
protected JobState _jobState;
private JobPriority _jobPriority;
[...]
}
하지만 작업 클래스를 상속 클래스를 전송하려고 할 때이 오류가의 WebMethod를 통해 (의 조바를 부르 자).
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type Job[] may not be used in this context.
첫 번째 오류에 대한했다 : 나는 어떤의 WebMethod에서 명시 적 조바 반환 형식이 없기 때문에 내의 WebMethod를 호출 할 때 오류가 발생합니다.
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
내가 추가 [SoapInclude이 (대해서 typeof (MyClass에))]은 차이가 없지만 XmlInclude를 사용 : 이제 (A의 WebMethod를 호출 할 때, 다시) 오류는 다음과 같습니다 다른 클래스, 또 다른 문제가 있습니다 대신 내 ServiceResult.ResultObject 배열을 XmlNodes로 만듭니다.
두 문제 모두 직렬화에 관한 것이지만 문제를 해결하는 방법을 모르겠습니다. 기본적으로, 내 질문입니다 : 어떻게 내가 개체 (내가이 ServiceResult.ResultObject 캐스트 및 캐주얼 인스턴스처럼 캐스팅 싶습니다 그래서 같은 방법으로 webmethod 통해 클라이언트에서 서버에 사용자 지정 개체를 전달해야합니다 그 수업)? 그렇게하는 가장 좋은 방법은 무엇입니까?
누구든지 해결책을 제안 할 수 있습니까?
당신이 .NET 2.0을 사용하여 부착 위치 : 여기
당신이 사용할 수있는 작은 시험 방법입니까? 그렇지 않다면 기존 ASMX 웹 서비스를 사용하지 않아야합니다. 새로운 개발에는 모두 WCF를 사용해야합니다. –글쎄, 나는 아직 WCF를 사용하지 않았기 때문에 더 쉬울 것이라고 생각했다. 그러나 그것이 더 빠를 수도 있습니다. – msu
기능이 훨씬 적고 확장 성이 훨씬 적기 때문에 "더 쉽습니다."예.좋은 생각은 아닙니다. 미래가 없으며 버그 수정이 없기 때문입니다. –