Я нашел следующий код на сайте msdn: http://msdn.microsoft.com/en-us/library/ms733133.aspx#Y380
[System.ServiceModel.ServiceContractAttribute(Namespace="http://Microsoft.ServiceModel.Samples", ConfigurationName="ICalculator")]
public interface ICalculator
{
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Add", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")]
double Add(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")]
double Subtract(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")]
double Multiply(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")]
double Divide(double n1, double n2);
}
public interface ICalculatorChannel : ICalculator, System.ServiceModel.IClientChannel
{
}
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
public CalculatorClient()
{
}
public CalculatorClient(string endpointConfigurationName) :
base(endpointConfigurationName)
{
}
public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public CalculatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public CalculatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{
}
public double Add(double n1, double n2)
{
return base.Channel.Add(n1, n2);
}
public double Subtract(double n1, double n2)
{
return base.Channel.Subtract(n1, n2);
}
public double Multiply(double n1, double n2)
{
return base.Channel.Multiply(n1, n2);
}
public double Divide(double n1, double n2)
{
return base.Channel.Divide(n1, n2);
}
}
Очевидно, это всемирно известный WCF CalculatorService на msdn.Код, который я показал выше, был сгенерирован с помощью svcutil.exe.Тем не менее, svcutil.exe не генерирует код F #, поэтому я пытаюсь перевести CalculatorClient на F # (я прекрасно справляюсь с интерфейсами).Я покажу вам, что у меня есть, за исключением того, что я закончил только первые три строки, и они, вероятно, в любом случае ошибочны (у меня такое впечатление от всей красной волнистости, украшающей его).Я полностью озадачен сочетанием наследования от базового класса и интерфейса одновременно.Мне не нужно переводить весь класс, только класс с несколькими конструкторами и одним из методов интерфейса, и я уверен, что смогу решить остальные.Хотя, если вы хотите перевести все это для потомков, пожалуйста, не стесняйтесь.
Спасибо,
Боб
Редактировать: Вот интерфейс, который я использую.Не стесняйтесь редактировать это, если это могло быть улучшено.
[<ServiceContract>]
type ICalculator =
[<OperationContract>]
abstract member Add: float*float -> float
[<OperationContract>]
abstract member Subtract: float*float -> float
[<OperationContract>]
abstract member Multiply: float*float -> float
[<OperationContract>]
abstract member Divide: float*float -> float