我有以下wcf服务:
[ServiceContract]
public interface IUnitTestingService
{
[OperationContract]
TestsResult ExecuteUnitTests(UploadRequest unitTestsExecutionData);
}
// Use a data contract as illustrated in the sample below to add composite types to service operations.
public class TestResult
{
public enum TestRunResult
{
Passed=1,
Failed=2,
Exception=3
}
public string TestName { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public string Result { get; set; }
}
[MessageContract(WrapperName = "TestResult"), DataContract]
public class TestsResult
{
[MessageHeader, DataMember]
public List<TestResult> Results { get; set; }
[MessageHeader, DataMember]
public int TotalExecutedTests { get; set; }
[MessageHeader, DataMember]
public int TotalPassedTests { get; set; }
[MessageHeader]
public int TotalFailedTests { get; set; }
}
[MessageContract]
public class UploadRequest
{
[MessageHeader(MustUnderstand = true)]
public UnitTestingFrameworkType UnitTestingFrameworkType { get; set; }
[MessageBodyMember(Order = 1)]
public Stream Stream { get; set; }
}但是,当我通过add service refference生成wcf客户机类时,我得到了如下结果:
public UTS.ServiceReference1.TestResult[] ExecuteUnitTests(UTS.ServiceReference1.UnitTestingFrameworkType UnitTestingFrameworkType, System.IO.Stream Stream, out int TotalExecutedTests, out int TotalFailedTests, out int TotalPassedTests)而不是这样:
TestsResult ExecuteUnitTests(UploadRequest unitTestsExecutionData);为什么?
发布于 2013-04-26 22:27:22
我不知道这是否会导致这个问题,但我会将类似结构的MessageContract标记如下:
编辑: 3. TestResult也应该是一个DataContract,所有成员都用DataMember标记。您的枚举必须使用EnumMember属性进行标记。
我希望这能帮到你。
发布于 2013-07-20 00:49:34
是的,我也面临着同样的问题,并解决了它。
我用两种方法解决了这个问题。
新的myBinding = BasicHttpBinding BasicHttpBinding();
新工厂=新ChannelFactory(myBinding,ChannelFactory EndpointAddress(""));
factory.CreateChannel();客户端= IContractName
我希望这能帮到你。
https://stackoverflow.com/questions/16237430
复制相似问题