Как отключить автоматически сгенерированную конфигурацию WCF - PullRequest
1 голос
/ 30 мая 2010

Каждый раз, когда моя программа запускается, vs добавляет конфигурацию по умолчанию в мой файл app.config. При этом запуске он работает нормально, но при следующем запуске он фактически пытается прочитать конфигурацию.

Проблема в том, что в конфигурации по умолчанию есть ошибки, в нее добавлен атрибут «Адрес», но в attritbutes нельзя указывать заглавные буквы, поэтому возникает исключение.

Это означает, что я должен удалять плохую секцию при каждом запуске!

Я пытался настроить .config, но он выдает ошибки.

Вот код, который я использую для размещения сервера:

private static System.Threading.AutoResetEvent stopFlag = new System.Threading.AutoResetEvent(false);
ServiceHost host = new ServiceHost(typeof(Service), new Uri("http://localhost:8000"));
host.AddServiceEndpoint(typeof(IService), new BasicHttpBinding(), "ChessServer");
host.Open();
stopFlag.WaitOne();
host.Close();

Вот код клиента, который вызывает сервер:

ChannelFactory<IChessServer> scf;
scf = new ChannelFactory<IService>
              (new BasicHttpBinding(), "http://localhost:8000");
IService service = scf.CreateChannel();

Спасибо за любую помощь.

Редактировать: Извините, что это заняло у меня так много времени, я вместо этого пытался использовать DualWSHttpBinding (поскольку мне все равно нужен сервер для вызова клиентских методов), но он все еще генерирует файл конфигурации. Вот весь автоматически сгенерированный файл конфигурации:

<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup><system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service name="Chess.ChessService">
                <endpoint Address="" binding="wsHttpBinding" contract="Chess.IChessServer">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint Address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <Add baseAddress="http://localhost:8732/Design_Time_Addresses/Chess/ChessService/" />
                    </baseAddresses>
                </host>
            </service>
            <service name="Chess.ChessClient">
                <endpoint Address="" binding="wsHttpBinding" contract="Chess.IChessClient">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint Address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <Add baseAddress="http://localhost:8732/Design_Time_Addresses/Chess/ChessClient/" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

Ответы [ 2 ]

1 голос
/ 31 мая 2010

Visual Studio не заново создает конфигурацию WCF при каждом запуске. Он будет воссоздавать конфигурацию WCF каждый раз, когда вы делаете Update Service Reference для ссылки на службу в проекте - но он определенно не делает этого автоматически перед каждым запуском - здесь должно быть что-то еще, что вызывает у вас горе.

Кроме того, вы не подключаетесь к правильному адресу - ваш сервер определяет его здесь:

ServiceHost host = new ServiceHost(..., new Uri("http://localhost:8000"));
host.AddServiceEndpoint(..., .., "ChessServer");

, и в результате ваш адрес конечной точки на сервере будет

http://localhost:8000/ChessServer

Однако ваш клиент, похоже, пытается подключиться к

http://localhost:8000/

и там нет никакого обслуживания.

Последнее замечание: если вы настраиваете в коде все свои вещи, такие как конечные точки, привязки и т. Д., Любые изменения конфигурации не должны вас вообще беспокоить - должно быть что-то еще, что вызывает ваши проблемы.

1 голос
/ 30 мая 2010

Вы совершенно ошиблись. Имена атрибутов и элементов могут быть прописными или строчными.

С чего вы взяли, что проблема в атрибуте - проблема? И с чего вы взяли, что app.config меняется при каждом запуске?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...