これは午前2時です。私はこの夜を把握しようとしています。SilverlightでProtoBuf-netシリアライザを使用するWCFサービスをどのように消費しますか?ProtoBuf-netシリアライザを使用するSilverlightでWCFサービスを使用するにはどうすればよいですか?
ただ一つのことを明確にするために、私のテストコンソールアプリケーションからサービスを呼び出すときにサービスはうまくいきます。
トップレベルのサービスはBasicHttpEndpoint(compabilityのために)を使って公開されていますが、私の問題を解決するなら他のバインディングのためにとても開いています。その後
... Code removed ...
EndpointAddress endpointAddress = new EndpointAddress(address);
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)
{
MaxReceivedMessageSize = int.MaxValue,
MaxBufferSize = int.MaxValue,
};
binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
ContractDescription contract = ContractDescription.GetContract(typeof(TServiceType));
ServiceEndpoint serviceEndpoint = new ServiceEndpoint(contract, binding, new EndpointAddress(address));
factory = new ChannelFactory<TServiceType>(serviceEndpoint);
AddBehaviors(serviceEndpoint);
ClientCredentials defaultCredentials = factory.Endpoint.Behaviors.Find<ClientCredentials>();
factory.Endpoint.Behaviors.Remove(defaultCredentials);
factory.Endpoint.Behaviors.Add(credentials);
... Code removed ...
AddBehavior:
は、私は私のためのサービスを作成する一般的な方法、のgetServiceを持って次のようにとにかく、.NET(Silverlightのではない)に私がサービスを利用することができますこの方法は、抽出されます
private static void AddBehaviors(ServiceEndpoint serviceEndpoint, int maxItemsInObjectGraph = int.MaxValue)
{
foreach (OperationDescription operation in serviceEndpoint.Contract.Operations)
{
DataContractSerializerOperationBehavior operationBehavior = operation.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (operationBehavior != null)
{
operation.Behaviors.Remove(operationBehavior);
}
ProtoOperationBehavior protoOperationBehavior = operation.Behaviors.Find<ProtoOperationBehavior>();
if (protoOperationBehavior == null)
{
protoOperationBehavior = new ProtoOperationBehavior(operation);
operation.Behaviors.Add(protoOperationBehavior);
}
protoOperationBehavior.MaxItemsInObjectGraph = int.MaxValue;
}
}
は、残念ながらそれはSilverlightでこれを実行することはできません:(だから私は同じことを達成するための他の方法を必要とし、今、私がこだわっている任意のsugg。 estionsは高く評価されています!
素晴らしい!私はそれをすぐにチェックします! –