Je rencontre un problème avec un service WCF fonctionnant correctement. J'essaye de créer un service duplex mais chaque fois que j'essaye de renvoyer un type de données fait sur commande il casse le côté de client.Le service WCF rompt avec le type de données personnalisé
Si je supprime GetTestData tout fonctionne correctement. Quand je l'ajoute, tout se brise du côté du client. Il semble que je puisse le réparer en décochant "Réutiliser les types dans les assemblages référencés", mais je ne suis pas sûr qu'il y ait des effets secondaires négatifs.
Voici le code
ITestService.cs
namespace MyApp.Server
{
[ServiceContract(Namespace = "http://www.mysite.net", CallbackContract = typeof(IDuplexTestClient))]
public interface ITestService
{
[OperationContract]
string Hello();
[OperationContract]
TestData GetTestData();
}
public interface IDuplexTestClient
{
[OperationContract(IsOneWay = true)]
void TestCallback(string message);
}
}
TestService.cs
namespace MyApp.Server
{
[ServiceBehavior(Namespace = "http://www.mysite.net")]
public class TestService : ITestService, ICrossDomainPolicyResponder
{
public string Hello()
{
return "Hello";
}
public TestData GetTestData()
{
return new TestData();
}
#region ICrossDomainPolicyResponder Members
public Stream GetSilverlightPolicy()
{
string result = @"<?xml version=""1.0"" encoding=""utf-8""?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers=""*"">
<domain uri=""*""/>
</allow-from>
<grant-to>
<resource path=""/"" include-subpaths=""true""/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>";
return StringToStream(result);
}
public Stream GetFlashPolicy()
{
string result = @"<?xml version=""1.0""?>
<!DOCTYPE cross-domain-policy SYSTEM ""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"">
<cross-domain-policy>
<allow-access-from domain=""*"" />
</cross-domain-policy>";
return StringToStream(result);
}
private Stream StringToStream(string result)
{
WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
}
#endregion
}
}
TestData.cs
namespace MyApp.SDK
{
[DataContract(Namespace = "http://www.mysite.net")]
public class TestData
{
[DataMember]
public string TestString { get; set; }
}
}
Si j'autorise la désactivation des types de réutilisation, j'obtiens deux copies de TestData car je dois l'utiliser dans le client. J'ai donc MyApp.TestServiceReference.TestData et MyApp.SDK.TestData. Sachant que ceux-ci seront identiques, y a-t-il un moyen simple de convertir le type de référence de service en type de SDK local? – thecaptain0220