Re[2]: Проблема с открытием UDP-сокетом
От: Artjom  
Дата: 15.11.11 16:08
Оценка:
Здравствуйте, SergeyT., Вы писали:

ST>Здравствуйте, Artjom, Вы писали:


A>>Возникает исключение на строчке mysocket = new Socket

A>>Текст исключения:
A>>
A>>((System.Configuration.ConfigurationErrorsException)(ex))
A>>InnerException = {"Unrecognized configuration section system.serviceModel. (C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\Config\\machine.config line 145)"}
A>>

A>>

ST>Так там же красным по английскому напиасано, в чем проблема У вас чего-то не то в вашем конфиге.


Где проблема понятно. Непонятно как исправить
Вот содержимое файла со строки 145:
    <system.serviceModel>
        <client>
            <metadata>
                <policyImporters>
                    <extension type="System.serviceModel.Channels.ContextBindingElementImporter, system.workflowservices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"/>
                    <extension type="System.serviceModel.Channels.ContextBindingElementImporter, system.workflowservices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"/>
                </policyImporters>
                <wsdlImporters>
                    <extension type="System.serviceModel.Channels.ContextBindingElementImporter, system.workflowservices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"/>
                    <extension type="System.serviceModel.Channels.ContextBindingElementImporter, system.workflowservices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"/>
                </wsdlImporters>
            </metadata>
        </client>
        <extensions>
            <behaviorExtensions>
                <add name="persistenceProvider" type="System.serviceModel.Configuration.PersistenceProviderElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="workflowRuntime" type="System.serviceModel.Configuration.WorkflowRuntimeElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="enableWebScript" type="System.serviceModel.Configuration.WebScriptEnablingElement, System.serviceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="webHttp" type="System.serviceModel.Configuration.WebHttpElement, System.serviceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            </behaviorExtensions>
            <bindingElementExtensions>
                <add name="webMessageEncoding" type="System.serviceModel.Configuration.WebMessageEncodingElement, System.serviceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="context" type="System.serviceModel.Configuration.ContextBindingElementExtensionElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            </bindingElementExtensions>
            <bindingExtensions>
                <add name="wsHttpContextBinding" type="System.serviceModel.Configuration.WSHttpContextBindingCollectionElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="netTcpContextBinding" type="System.serviceModel.Configuration.NetTcpContextBindingCollectionElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="webHttpBinding" type="System.serviceModel.Configuration.WebHttpBindingCollectionElement, System.serviceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add name="basicHttpContextBinding" type="System.serviceModel.Configuration.BasicHttpContextBindingCollectionElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            </bindingExtensions>
        </extensions>
    </system.serviceModel>


ST>Скопируйте свой же код в пустое консольное приложение и запустите и будет все ок (я, например, так и сделал и никаких ошибок не возникло).

Код рабочий и программа работала до тех пор пока не была установлена .NET версии 4.0.

ST>К коду есть МНОГО вопросов (если это не лаба, для лабы код походит, для других целей — нет).

ST>1. Наименование ужасно. В .NET-е существуют устойчивые правила именования классов, полей, параметров и т.д.
ST> Классы: PamelCase — в вашем случае: UdpServer (никаких префиксов, исключения — только имена интерфейсов, которые начинаются с I, например, IDisposable).


ST> Поля: camelCase — в вашем случае поля должны быть: fifoNext, fifoSize и т.д., возможно использование лидирующего подчеркивания (т.е. _fifoNext)


ST> Параметры: так же как и поля. Формат типа server_port — не принят.


Delphi даёт о себе знать. Не так просто переменить ставший привычным стиль написния/именования и проч.

ST>2. Обработка исключений

ST> В вашем коде блоки catch вообще пустые (как правильно уже заметили), что усложняет вашу отладку, да и каждому читателю для проверки туда хоть что-то придется вбить.

Там делать нечего, потому и пустые блоки catch: если connect проиэошёл — хорошо, нет — пытаемся до успеха.

ST>3. Дизайн. Судя по количеству кода, ваш класс TUDPServer нужно переименовать на UDPШвейцарскийНожServer, настолько много всего он делает. Такими темпами в нем понять вообще ничего нельзя будет очень и очень скоро.


Всего лишь подключается к порту и слушает его.
Вобщем не понял претензии.
Как бы Вы сделали?

ST>4. Формат заданного вопроса.

ST> Чтобы проверить работоспособность вашего кода нужно было сделать ряд дополнительных действий, таких как объявление класса, вынос полей, добавление вывода в консоль в блоках catch. Если вы хотите получить ответ, то разумнее потрать немного времени на формирование вопроса, на который удобно отвечать. Это сэкономит время отвечающему и, соответственно, увеличит вероятность ответа

Дело не в коде, а в NET и его настройках(или файлах), Что там нужно исправить и как?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.