运行时对象序列化到SvcUtil工具生成的部分类重presentations [英] serialize runtime objects into svcutil generated partial class representations
问题描述
我用SvcUtil工具生成以下code:
// ------------------------------------ ------------------------------------------
//&所述;自动生成>
//这个code是由工具生成。
//运行时版本:4.0.30319.239
//
//更改此文件可能会导致不正确的行为,如果将丢失
//在code再生。
//< /自动生成>
// ------------------------------------------------ ------------------------------
命名空间System.Net
{
使用System.Runtime.Serialization;
[System.Diagnostics.DebuggerStepThroughAttribute()]
[系统。codeDom.Compiler.Generated codeAttribute(System.Runtime.Serialization,4.0.0.0)]
[System.Runtime.Serialization.DataContractAttribute(名称为端点,命名空间=http://schemas.datacontract.org/2004/07/System.Net)
[System.Runtime.Serialization.KnownTypeAttribute(typeof运算(System.Net.IPEndPoint))]
公共部分类的EndPoint:对象,System.Runtime.Serialization.IExtensibleDataObject
{
私人System.Runtime.Serialization.ExtensionDataObject extensionDataField;
公共System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
得到
{
返回this.extensionDataField;
}
组
{
this.extensionDataField =价值;
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[系统。codeDom.Compiler.Generated codeAttribute(System.Runtime.Serialization,4.0.0.0)]
[System.Runtime.Serialization.DataContractAttribute(NAME =IPEndPoint,命名空间=http://schemas.datacontract.org/2004/07/System.Net)
公共部分类IPEndPoint:System.Net.EndPoint
{
私人System.Net.IPAddress m_AddressField;
私人诠释m_PortField;
[System.Runtime.Serialization.DataMemberAttribute(IsRequired = TRUE)]
公共System.Net.IPAddress m_Address
{
得到
{
返回this.m_AddressField;
}
组
{
this.m_AddressField =价值;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired = TRUE)]
公众诠释m_Port
{
得到
{
返回this.m_PortField;
}
组
{
this.m_PortField =价值;
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[系统。codeDom.Compiler.Generated codeAttribute(System.Runtime.Serialization,4.0.0.0)]
[System.Runtime.Serialization.DataContractAttribute(名称为ip地址,命名空间=http://schemas.datacontract.org/2004/07/System.Net)
公共部分类ip地址:对象,System.Runtime.Serialization.IExtensibleDataObject
{
私人System.Runtime.Serialization.ExtensionDataObject extensionDataField;
专用长m_AddressField;
私人System.Net.Sockets.AddressFamily m_FamilyField;
私人诠释m_Hash codeField;
私人USHORT [] m_NumbersField;
专用长m_ScopeIdField;
公共System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
得到
{
返回this.extensionDataField;
}
组
{
this.extensionDataField =价值;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired = TRUE)]
众长m_Address
{
得到
{
返回this.m_AddressField;
}
组
{
this.m_AddressField =价值;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired = TRUE)]
公共System.Net.Sockets.AddressFamily m_Family
{
得到
{
返回this.m_FamilyField;
}
组
{
this.m_FamilyField =价值;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired = TRUE)]
公众诠释m_Hash code
{
得到
{
返回this.m_Hash codeField;
}
组
{
this.m_Hash codeField =价值;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired = TRUE)]
公共USHORT [] m_Numbers
{
得到
{
返回this.m_NumbersField;
}
组
{
this.m_NumbersField =价值;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired = TRUE)]
众长m_ScopeId
{
得到
{
返回this.m_ScopeIdField;
}
组
{
this.m_ScopeIdField =价值;
}
}
}
}
命名空间的System.Net.Sockets
{
使用System.Runtime.Serialization;
[系统。codeDom.Compiler.Generated codeAttribute(System.Runtime.Serialization,4.0.0.0)]
[System.Runtime.Serialization.DataContractAttribute(NAME =AddressFamily,命名空间=http://schemas.datacontract.org/2004/07/System.Net.Sockets)
公共枚举AddressFamily:INT
{
[System.Runtime.Serialization.EnumMemberAttribute()]
未知= -1,
[System.Runtime.Serialization.EnumMemberAttribute()]
未指定= 0,
[System.Runtime.Serialization.EnumMemberAttribute()]
的Unix = 1,
[System.Runtime.Serialization.EnumMemberAttribute()]
网间= 2,
[System.Runtime.Serialization.EnumMemberAttribute()]
ImpLink = 3,
[System.Runtime.Serialization.EnumMemberAttribute()]
小狗= 4,
[System.Runtime.Serialization.EnumMemberAttribute()]
混沌= 5,
[System.Runtime.Serialization.EnumMemberAttribute()]
NS = 6,
[System.Runtime.Serialization.EnumMemberAttribute()]
IPX = 6,
[System.Runtime.Serialization.EnumMemberAttribute()]
异= 7,
[System.Runtime.Serialization.EnumMemberAttribute()]
OSI = 7,
[System.Runtime.Serialization.EnumMemberAttribute()]
ECMA = 8,
[System.Runtime.Serialization.EnumMemberAttribute()]
DataKit = 9,
[System.Runtime.Serialization.EnumMemberAttribute()]
CCITT = 10,
[System.Runtime.Serialization.EnumMemberAttribute()]
SNA = 11,
[System.Runtime.Serialization.EnumMemberAttribute()]
DECNET = 12,
[System.Runtime.Serialization.EnumMemberAttribute()]
数据链接= 13,
[System.Runtime.Serialization.EnumMemberAttribute()]
纬度= 14,
[System.Runtime.Serialization.EnumMemberAttribute()]
HyperChannel = 15,
[System.Runtime.Serialization.EnumMemberAttribute()]
的AppleTalk = 16,
[System.Runtime.Serialization.EnumMemberAttribute()]
的NetBios = 17,
[System.Runtime.Serialization.EnumMemberAttribute()]
VoiceView = 18,
[System.Runtime.Serialization.EnumMemberAttribute()]
火狐= 19,
[System.Runtime.Serialization.EnumMemberAttribute()]
榕树= 21,
[System.Runtime.Serialization.EnumMemberAttribute()]
ATM = 22,
[System.Runtime.Serialization.EnumMemberAttribute()]
InterNetworkV6 = 23,
[System.Runtime.Serialization.EnumMemberAttribute()]
集群= 24,
[System.Runtime.Serialization.EnumMemberAttribute()]
Ieee12844 = 25,
[System.Runtime.Serialization.EnumMemberAttribute()]
IRDA = 26,
[System.Runtime.Serialization.EnumMemberAttribute()]
NetworkDesigners = 28,
[System.Runtime.Serialization.EnumMemberAttribute()]
最大= 29,
}
}
[系统。codeDom.Compiler.Generated codeAttribute(System.ServiceModel,4.0.0.0)]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName =IConnectionHost,CallbackContract = typeof运算(IConnectionHostCallback),SessionMode = System.ServiceModel.SessionMode.Required)
公共接口IConnectionHost
{
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IConnectionHost/OpenTunnel", ReplyAction =http://tempuri.org/IConnectionHost/OpenTunnelResponse)]
布尔OpenTunnel(INT serverPort);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IConnectionHost/CloseTunnel", ReplyAction =http://tempuri.org/IConnectionHost/CloseTunnelResponse)]
布尔CloseTunnel(INT serverPort);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IConnectionHost/DisconnectAtHost", ReplyAction =http://tempuri.org/IConnectionHost/DisconnectAtHostResponse)]
布尔DisconnectAtHost(INT serverPort,System.Net.IPEndPoint客户端);
[System.ServiceModel.OperationContractAttribute(ACTION =http://tempuri.org/IConnectionHost/Reply,ReplyAction =http://tempuri.org/IConnectionHost/ReplyResponse)
INT回复(INT serverPort,System.Net.IPEndPoint客户端,[System.ServiceModel.MessageParameterAttribute(名称为回复)的byte [] reply1);
}
[系统。codeDom.Compiler.Generated codeAttribute(System.ServiceModel,4.0.0.0)]
公共接口IConnectionHostCallback
{
[System.ServiceModel.OperationContractAttribute(IsOneWay = TRUE,行动=http://tempuri.org/IConnectionHost/Relay)
无效继电器(INT serverPort,System.Net.IPEndPoint客户端,byte []的信息);
[System.ServiceModel.OperationContractAttribute(IsOneWay = TRUE,行动=http://tempuri.org/IConnectionHost/DisconnectAtClient)
无效DisconnectAtClient(INT serverPort,System.Net.IPEndPoint客户端);
}
[系统。codeDom.Compiler.Generated codeAttribute(System.ServiceModel,4.0.0.0)]
公共接口IConnectionHostChannel:IConnectionHost,System.ServiceModel.IClientChannel
{
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[系统。codeDom.Compiler.Generated codeAttribute(System.ServiceModel,4.0.0.0)]
公共部分类ConnectionHostClient:System.ServiceModel.DuplexClientBase< IConnectionHost>中IConnectionHost
{
公共ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance):
底座(callbackInstance)
{
}
公共ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance,串endpointConfigurationName):
基地(callbackInstance,endpointConfigurationName)
{
}
公共ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance,串endpointConfigurationName,串remoteAddress):
基地(callbackInstance,endpointConfigurationName,remoteAddress)
{
}
公共ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance,串endpointConfigurationName,System.ServiceModel.EndpointAddress remoteAddress):
基地(callbackInstance,endpointConfigurationName,remoteAddress)
{
}
公共ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance,System.ServiceModel.Channels.Binding结合,System.ServiceModel.EndpointAddress remoteAddress):
基地(callbackInstance,装订,remoteAddress)
{
}
公共BOOL OpenTunnel(INT serverPort)
{
返回base.Channel.OpenTunnel(serverPort);
}
公共BOOL CloseTunnel(INT serverPort)
{
返回base.Channel.CloseTunnel(serverPort);
}
公共BOOL DisconnectAtHost(INT serverPort,System.Net.IPEndPoint客户端)
{
返回base.Channel.DisconnectAtHost(serverPort,客户端);
}
公众诠释回复(INT serverPort,System.Net.IPEndPoint客户端,byte []的reply1)
{
返回base.Channel.Reply(serverPort,客户端,reply1);
}
}
然后,在数学(8)及.NET /链接创建IPEndPoint对象:
EP // ClearAll
EP [port_]:=网页特效[System.Net.IPEndPoint,网页特效[System.Net.IPAddress,{127,0,0,1}],port_]
retargetedEndPoint = EP @ 900
和尝试调用:
。回复(,retargetedEndPoint,。)
问题是数学IPEndPoint对象真正System.NET.IPEndPoint型,而预期的是一些序列重新presentation!
- 如何转换后者?
- 如何将这些部分类SvcUtil工具生成的行为,他们是否延长?真正System.NET.IPEndPoint类型或仅仅是他们的影子,因为它假定C#编译器(不运行时)会自动处理必要的转换定义?
它不看的权利,你会产生System.Net命名空间什么。我想,也许你想使用 /参考:<文件路径>
SvcUtil工具的选项,它知道到哪里寻找现有类型
I use svcutil to generate the following code:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace System.Net
{
using System.Runtime.Serialization;
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="EndPoint", Namespace="http://schemas.datacontract.org/2004/07/System.Net")]
[System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Net.IPEndPoint))]
public partial class EndPoint : object, System.Runtime.Serialization.IExtensibleDataObject
{
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
public System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
get
{
return this.extensionDataField;
}
set
{
this.extensionDataField = value;
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="IPEndPoint", Namespace="http://schemas.datacontract.org/2004/07/System.Net")]
public partial class IPEndPoint : System.Net.EndPoint
{
private System.Net.IPAddress m_AddressField;
private int m_PortField;
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public System.Net.IPAddress m_Address
{
get
{
return this.m_AddressField;
}
set
{
this.m_AddressField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public int m_Port
{
get
{
return this.m_PortField;
}
set
{
this.m_PortField = value;
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="IPAddress", Namespace="http://schemas.datacontract.org/2004/07/System.Net")]
public partial class IPAddress : object, System.Runtime.Serialization.IExtensibleDataObject
{
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
private long m_AddressField;
private System.Net.Sockets.AddressFamily m_FamilyField;
private int m_HashCodeField;
private ushort[] m_NumbersField;
private long m_ScopeIdField;
public System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
get
{
return this.extensionDataField;
}
set
{
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public long m_Address
{
get
{
return this.m_AddressField;
}
set
{
this.m_AddressField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public System.Net.Sockets.AddressFamily m_Family
{
get
{
return this.m_FamilyField;
}
set
{
this.m_FamilyField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public int m_HashCode
{
get
{
return this.m_HashCodeField;
}
set
{
this.m_HashCodeField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public ushort[] m_Numbers
{
get
{
return this.m_NumbersField;
}
set
{
this.m_NumbersField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
public long m_ScopeId
{
get
{
return this.m_ScopeIdField;
}
set
{
this.m_ScopeIdField = value;
}
}
}
}
namespace System.Net.Sockets
{
using System.Runtime.Serialization;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="AddressFamily", Namespace="http://schemas.datacontract.org/2004/07/System.Net.Sockets")]
public enum AddressFamily : int
{
[System.Runtime.Serialization.EnumMemberAttribute()]
Unknown = -1,
[System.Runtime.Serialization.EnumMemberAttribute()]
Unspecified = 0,
[System.Runtime.Serialization.EnumMemberAttribute()]
Unix = 1,
[System.Runtime.Serialization.EnumMemberAttribute()]
InterNetwork = 2,
[System.Runtime.Serialization.EnumMemberAttribute()]
ImpLink = 3,
[System.Runtime.Serialization.EnumMemberAttribute()]
Pup = 4,
[System.Runtime.Serialization.EnumMemberAttribute()]
Chaos = 5,
[System.Runtime.Serialization.EnumMemberAttribute()]
NS = 6,
[System.Runtime.Serialization.EnumMemberAttribute()]
Ipx = 6,
[System.Runtime.Serialization.EnumMemberAttribute()]
Iso = 7,
[System.Runtime.Serialization.EnumMemberAttribute()]
Osi = 7,
[System.Runtime.Serialization.EnumMemberAttribute()]
Ecma = 8,
[System.Runtime.Serialization.EnumMemberAttribute()]
DataKit = 9,
[System.Runtime.Serialization.EnumMemberAttribute()]
Ccitt = 10,
[System.Runtime.Serialization.EnumMemberAttribute()]
Sna = 11,
[System.Runtime.Serialization.EnumMemberAttribute()]
DecNet = 12,
[System.Runtime.Serialization.EnumMemberAttribute()]
DataLink = 13,
[System.Runtime.Serialization.EnumMemberAttribute()]
Lat = 14,
[System.Runtime.Serialization.EnumMemberAttribute()]
HyperChannel = 15,
[System.Runtime.Serialization.EnumMemberAttribute()]
AppleTalk = 16,
[System.Runtime.Serialization.EnumMemberAttribute()]
NetBios = 17,
[System.Runtime.Serialization.EnumMemberAttribute()]
VoiceView = 18,
[System.Runtime.Serialization.EnumMemberAttribute()]
FireFox = 19,
[System.Runtime.Serialization.EnumMemberAttribute()]
Banyan = 21,
[System.Runtime.Serialization.EnumMemberAttribute()]
Atm = 22,
[System.Runtime.Serialization.EnumMemberAttribute()]
InterNetworkV6 = 23,
[System.Runtime.Serialization.EnumMemberAttribute()]
Cluster = 24,
[System.Runtime.Serialization.EnumMemberAttribute()]
Ieee12844 = 25,
[System.Runtime.Serialization.EnumMemberAttribute()]
Irda = 26,
[System.Runtime.Serialization.EnumMemberAttribute()]
NetworkDesigners = 28,
[System.Runtime.Serialization.EnumMemberAttribute()]
Max = 29,
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="IConnectionHost", CallbackContract=typeof(IConnectionHostCallback), SessionMode=System.ServiceModel.SessionMode.Required)]
public interface IConnectionHost
{
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IConnectionHost/OpenTunnel", ReplyAction="http://tempuri.org/IConnectionHost/OpenTunnelResponse")]
bool OpenTunnel(int serverPort);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IConnectionHost/CloseTunnel", ReplyAction="http://tempuri.org/IConnectionHost/CloseTunnelResponse")]
bool CloseTunnel(int serverPort);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IConnectionHost/DisconnectAtHost", ReplyAction="http://tempuri.org/IConnectionHost/DisconnectAtHostResponse")]
bool DisconnectAtHost(int serverPort, System.Net.IPEndPoint client);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IConnectionHost/Reply", ReplyAction="http://tempuri.org/IConnectionHost/ReplyResponse")]
int Reply(int serverPort, System.Net.IPEndPoint client, [System.ServiceModel.MessageParameterAttribute(Name="reply")] byte[] reply1);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IConnectionHostCallback
{
[System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://tempuri.org/IConnectionHost/Relay")]
void Relay(int serverPort, System.Net.IPEndPoint client, byte[] message);
[System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://tempuri.org/IConnectionHost/DisconnectAtClient")]
void DisconnectAtClient(int serverPort, System.Net.IPEndPoint client);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IConnectionHostChannel : IConnectionHost, System.ServiceModel.IClientChannel
{
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class ConnectionHostClient : System.ServiceModel.DuplexClientBase<IConnectionHost>, IConnectionHost
{
public ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance) :
base(callbackInstance)
{
}
public ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance, string endpointConfigurationName) :
base(callbackInstance, endpointConfigurationName)
{
}
public ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance, string endpointConfigurationName, string remoteAddress) :
base(callbackInstance, endpointConfigurationName, remoteAddress)
{
}
public ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance, string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(callbackInstance, endpointConfigurationName, remoteAddress)
{
}
public ConnectionHostClient(System.ServiceModel.InstanceContext callbackInstance, System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(callbackInstance, binding, remoteAddress)
{
}
public bool OpenTunnel(int serverPort)
{
return base.Channel.OpenTunnel(serverPort);
}
public bool CloseTunnel(int serverPort)
{
return base.Channel.CloseTunnel(serverPort);
}
public bool DisconnectAtHost(int serverPort, System.Net.IPEndPoint client)
{
return base.Channel.DisconnectAtHost(serverPort, client);
}
public int Reply(int serverPort, System.Net.IPEndPoint client, byte[] reply1)
{
return base.Channel.Reply(serverPort, client, reply1);
}
}
Then in Mathematica (8) & .NET/Link create an IPEndPoint object:
ep // ClearAll
ep[port_] := NETNew["System.Net.IPEndPoint", NETNew["System.Net.IPAddress", {127, 0, 0, 1}], port_]
retargetedEndPoint=ep@900
and try to call:
.Reply(.,retargetedEndPoint,.)
The problem is the Mathematica IPEndPoint object is of the genuine System.NET.IPEndPoint type whereas the expected one is some serialized representation!
- How can I convert the latter?
- How do these partial classes svcutil generates behave, do they extend?? the definitions of the real System.NET.IPEndPoint types or merely shadow them as it is assumed C# compilers (not the runtime) will automatically handle the necessary conversions?
It doesn't look right that you would generate anything in the System.Net namespace. I think maybe you want to use the /reference:<file path>
option of svcutil so that it know where to look for existing types.
这篇关于运行时对象序列化到SvcUtil工具生成的部分类重presentations的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!