2010-07-01 5 views
9

Delphi 2006에서 개발 한 서버/클라이언트 응용 프로그램이 있습니다. 클라이언트는 Win32이고 서버는 .net 1.1 웹 서비스입니다.ASMX로 노출 된 WCF 서비스는 매개 변수를 허용하지 않습니다.

이 프로젝트를 업데이트하는 중이지만 작은 단계로 수행해야합니다. 나는 서버로 시작하여 VS2010 (C# .net 4.0)에서 WCF 프로젝트를 만들었습니다. 첫 번째 단계는 클라이언트를 변경하지 않고 WCF에서 서버를 실행하는 것입니다. 그래서 이전의 델파이 Webservice에 비슷한 인터페이스를 생성 한 외관 패턴을 사용하여 .net 1.1 dll에 대한 참조를 추가했고, 구현에서 방금 old .net 1.1 코드를 호출했습니다.

다음 단계는 클라이언트에서 프록시 클래스를 업데이트하는 단계입니다. 이것은 실패했습니다. WSDL 가져 오기 프로그램은 basicHttpBinding을 올바르게 이해하지 못 했으므로 genereated 된 프록시 클래스가 기존 프록시를 바꿀 수 없습니다.

약간의 연구 끝에이 블로그 게시물을 발견했습니다. 이 일

http://kjellsj.blogspot.com/2006/12/how-to-expose-wcf-service-also-as-asmx.html

는 ASMX WSDL은 기존의 .NET 1.1 그래서 모든 다르지 않았다 확인 appered.

하지만 그렇지 않았습니다. 새 서비스를 테스트 할 때 모든 매개 변수가 서버에서 공백/null이라는 것을 발견했습니다. 클라이언트에서 Fiddler로 시도해 보았고 매개 변수가 서버에 전송 된 XML에 존재합니다.

그래서 막혀 있습니다. 이 문제를 해결하는 방법에 대한 생각은 많이 감사 할 것입니다. 나에게 알려주기 위해 인터 레스트 할 수있는 코드가 있습니까?

+0

따라서 WSDL은 동일하지만 서버는 이제 1.1 대신 .Net 4.0입니까? 델파이 클라이언트가 이전과 같은 WSDL을 사용하지만 서버가 매개 변수를 더 이상 볼 수 없다면 닷넷에 클라이언트를 작성하고 이것이 작동하는지 확인합니다. 그렇다면 .NET과 Delphi의 클라이언트 비누 요청을 비교하십시오. – mjn

+5

XML을 비교하십시오. "Null 매개 변수"는 일반적으로 전송되는 항목과 예상되는 항목 사이에 네임 스페이스 차이가 있음을 의미합니다. –

답변

1

웹 서비스 asmx에서 유사한 문제가 발생했습니다. 특정 데이터가 값을 잃어 버리고있었습니다. 계층 적 데이터를 사용하는 경우 XmlInclude 특성을 사용하여 내부 또는 상속 된 개체를 선언해야 할 수 있습니다. 예를 들어, 서비스 및 고객 하위 클래스에 사용되는 User 클래스가있는 경우 웹 메서드에서 직접 사용되지 않는 경우 Customer 클래스를 서비스에 선언해야 할 수 있습니다. 당신은 다음과 같이 이것을 할 것입니다.

[XmlInclude(typeof(Customer))] 
public class Service : WebService 

물론이 일과 관련이 없으므로 행운을 빈다. :)

0

새 서비스의 매개 변수 이름이 이전 서비스의 이름과 일치하는지 확인하십시오. 매개 변수 이름을 변경하면 XML에서 매핑되지 않으므로 실행 코드에서 null이됩니다.

0

하위 클래스에 KnownType 특성 추가

관련 문제