2015-01-21 5 views
1

안녕하세요, 필자는 지금까지 본 게시물에서 문제를 해결할 수 없었기 때문에 복제가 가능하지만 여기 작성한 것 같습니다.WCF에서 메시지 계약 피하기

내 WCF 서비스에서 DataContract를 사용하고 클라이언트에서 DataContract 개체로만 서비스를 사용하려고하지만 서비스 참조를 만들 때 모든 메서드에 대한 메시지 계약을 생성하는 WCF 서비스가 생성됩니다.

[ServiceContract] 

public interface IUserService 
{ 
    [OperationContract] 
    UserVO GetUser(int Id); 
} 

[DataContract] 
public Class UserVO 
{ 
[DataMember] 
public int Id{get;set;}; 
} 

엔티티를 사용할 수있는 참조 된 라이브러리에서 "메시지 계약 생성 항상"및 체크 된 재사용 유형의 선택을 취소했습니다 (데이터 계약).

내 reference.cs는

System.ServiceModel.MessageContractAttribute(WrapperName="GetUser",  WrapperNamespace="http://tempuri.org/", IsWrapped=true)] 
public partial class GetUserRequest { 
} 

편집과 같은 메시지 계약을 데 1 :

내 Reference.svcmap이

<ClientOptions> 
<GenerateAsynchronousMethods>false</GenerateAsynchronousMethods> 
<EnableDataBinding>true</EnableDataBinding> 
<ExcludedTypes /> 
<ImportXmlTypes>false</ImportXmlTypes> 
<GenerateInternalTypes>false</GenerateInternalTypes> 
<GenerateMessageContracts>false</GenerateMessageContracts> 
<NamespaceMappings /> 
<CollectionMappings> 
    <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" /> 
</CollectionMappings> 
<GenerateSerializableTypes>true</GenerateSerializableTypes> 
<Serializer>Auto</Serializer> 
<UseSerializerForFaults>true</UseSerializerForFaults> 
<ReferenceAllAssemblies>true</ReferenceAllAssemblies> 
<ReferencedAssemblies /> 
<ReferencedDataContractTypes /> 
<ServiceContractMappings /> 

편집 2와 같은 클라이언트 구성을 가지고 : 아래와 같은 것을 달성하려고합니다.

[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUserService/GetUserDetails", ReplyAction="http://tempuri.org/IUserService/GetUserDetailsResponse")] 
    [System.ServiceModel.FaultContractAttribute(typeof(UserServiceFaultContract), Action="http://tempuri.org/IUserService/GetUserDetailsUserServiceFaultContractFault", Name="UserServiceFaultContract", Namespace="http://schemas.datacontract.org/2004/07/mynamespace")] 
    MyEntities.UserVO GetUserDetails(int id); 
+0

질문이 표시되지 않습니까? –

+0

고객에게 메시지 계약 생성을 피하고 싶습니다. – Nagaraj

+0

아직 질문 없습니다. 문제가 무엇입니까 ??? –

답변

0

기본적으로 WCF는 DataContractSerializer 클래스를 사용하여 데이터 형식을 serialize합니다. https://msdn.microsoft.com/en-us/library/ms733901(v=vs.110).aspx

은 신중하게 고려해야 추천
: 시나리오가 XmlSerializer의 사용을 필요로하는 경우, 대신, 당신은 수동으로 서비스

다음 MSDN 문서에 XmlSerializerFormatAttribute 속성을 적용하여 XmlSerializer로 전환 할 수 있습니다 프로세스를 설명합니다 직렬화 클래스를 전환하기 전에 보안 노트를 읽으십시오.

+0

미안하지만 분명하지 않은 경우 DataContractSerializer Seymour를 원한다면 편집 2 – Nagaraj

0

그런 다음 클라이언트와 어셈블리를 공유하십시오! 하나의 어셈블리에 서비스 인터페이스와 모든 DataContracts를 넣으십시오. 그런 다음 클라이언트는 채널 channelfactory "패턴"을 사용하여 WCF 서비스에 연결할 수 있습니다.

+0

@jack을 참조하십시오. 클라이언트에 datacontracts 어셈블리를 공유하고 참조 된 어셈블리를 모두 사용하도록 서비스를 구성하고 있지만 덮어 쓰고 있습니다. 내 선택 및 MessageContracts 및 Arraylist 만들기, 어디에 참조 된 라이브러리 사용 및 일반 형식으로 컬렉션 형식에 대해 구성한 – Nagaraj

관련 문제