Nuget -Pakete: Dotamf (Serializer) und Dotamf.wcf (Service Layer).
.NET Serializer- und WCF -Bindungen für AMF mit vollem Flex -Remoting -Unterstützung.
Action Message Format (AMF) ist ein binäres Format, das zum Serialisieren von Objektdiagramme wie ActionScript -Objekten und XML oder zur Senden von Nachrichten zwischen einem Adobe -Flash -Client und einem Remote -Dienst, in der Regel ein Flash -Medienserver oder eine Alternativen von Drittanbietern, gesendet wird. Die ActionScript 3 -Sprache enthält Klassen für die Codierung und Dekodierung aus dem AMF -Format.
http://en.wikipedia.org/wiki/action_message_format
AMF hat mehrere Vorteile gegenüber vorhandenen Serialisierungsformaten, einschließlich der Fähigkeit, Objekte -Diagramme zu verwalten, einen kleinen Fußabdruck beim Speichern einer Reihe identischer Objekte (einschließlich Zeichenfolgen) oder Verweise auf dasselbe Objekt und eine breite Palette von nativ unterstützten Typen (z. B. XmlDocument , DateTime und Dictionary ).
Betrachten Sie die folgenden Serviceverträge:
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Xml;
namespace ExampleService
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
ProductVo[] GetAllProducts();
[OperationContract(Name = "GetUser")] //Custom procedure name
User GetUserDataContract(int id);
[OperationContract]
int AddUser(User user);
[OperationContract]
Content SendContent(Content content);
[OperationContract]
User[] SendGraph(User[] users);
[OperationContract]
void DoStuff();
[OperationContract]
[FaultContract(typeof(CustomFault))]
void DoFault();
}
[DataContract] //Will have the "ExampleService.User" alias
public class User
{
[DataMember(Name = "id")] //Custom field name
public int Id { get; set; }
[DataMember(Name = "is_active")]
public bool IsActive { get; set; }
[DataMember] //Use explicit name
public string name { get; set; }
[DataMember(Name = "products")]
public ProductVo[] Products { get; set; }
}
[DataContract(Name = "Product")] //Custom alias
public class ProductVo
{
[DataMember(Name = "id")]
public int Id { get; set; }
}
[DataContract]
public class CustomFault
{
[DataMember(Name = "date")]
public DateTime Date { get; set; }
[DataMember(Name = "message")]
public string Message { get; set; }
}
[DataContract]
public class Content
{
[DataMember(Name = "data")]
public byte[] Data { get; set; }
[DataMember(Name = "xml")]
public XmlDocument Xml { get; set; }
}
}
Um einem Dienst einen AMF -Support hinzuzufügen, müssen Sie Ihre Konfiguration nur aktualisieren:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="amfBehaviorExtension" type="DotAmf.ServiceModel.Configuration.AmfBehaviorExtensionElement, DotAmf.Wcf"/>
</behaviorExtensions>
<bindingElementExtensions>
<add name="amfBindingExtension" type="DotAmf.ServiceModel.Configuration.AmfBindingExtensionElement, DotAmf.Wcf"/>
</bindingElementExtensions>
</extensions>
<behaviors>
<endpointBehaviors>
<behavior name="amfEndpoint">
<amfBehaviorExtension/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="amfServiceBehavior">
<serviceMetadata httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="amfBinding">
<amfBindingExtension/>
<httpTransport/>
</binding>
</customBinding>
</bindings>
<services>
<service name="ExampleService.MyService" behaviorConfiguration="amfServiceBehavior">
<endpoint address="" contract="ExampleService.IMyService" binding="customBinding" bindingConfiguration="amfBinding" behaviorConfiguration="amfEndpoint"/>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="false"/>
</system.webServer>
</configuration>
Im Beispiel für einen vollständigen Service- und Client -Implementierungen finden Sie den Examples -Ordner.
Sie können DataContractAmfSerializer verwenden, um außerhalb des WCF von binären AMF -Daten zu serialisieren und von binären AMF -Daten zu deverialisieren.
CustomType objectToWrite;
var knownTypes = new[] {
typeof(KnownType1),
typeof(KnownType2)
};
var serializer = new DataContractAmfSerializer(typeof(CustomType), knownTypes);
using (var stream = new MemoryStream())
serializer.WriteObject(stream, objectToWrite);