Отсутствует конструктор сокета

Эта программа:

open System.Net.Sockets    
let s = new Socket(SocketType.Stream, ProtocolType.Tcp)

Сбой с этим сообщением об ошибке на моно:

ошибка FS0505: член или конструктор объекта 'Socket' не принимает 2 аргументов. Обнаружена перегрузка с 1 аргументом.

И это сообщение об ошибке на TryF#:

ошибка FS0501: член или объектный конструктор 'Socket' принимает 3 аргумента (ов), но здесь ему дается 2. Необходимая подпись: 'Socket(addressFamily: AddressFamily, socketType: SocketType, protocolType: ProtocolType): unit'.

Документация говорит об обратном.

Что я делаю неправильно?

1 ответ

Этот код прекрасно работает для меня в Visual Studio. В Try F# код работает с версией Silverlight платформы.NET, которая не имеет всех перегрузок, доступных в полной версии.NET, и поэтому перегрузка с двумя аргументами отсутствует.

Это можно увидеть, если перейти к разделу "Информация о версии" на двух страницах MSDN:

Я полагаю, вы должны быть в состоянии использовать:

let s = new Socket(AddressFamily.Unspecified, SocketType.Stream, ProtocolType.Tcp)

Хотя я подозреваю, что Silverlight может иметь другие ограничения для сокетов по соображениям безопасности, поэтому, если вы хотите работать в сети на F#, возможно, лучше получить версию для ПК.

Другие вопросы по тегам