Используете ли вы одинаковую привязку на обоих? Если это так, попробуйте 2 отдельных привязки - одну для конечной точки mex и одну для wshttp:
Так что за сервис - что-то вроде:
<wsHttpBinding><binding name="wsHttpBindingMessageUname">
<security mode="Message">
<message clientCredentialType="UserName" negotiateServiceCredential="true"
establishSecurityContext="false" />
</security></binding></wsHttpBinding>
и для конечной точки mex (без защиты):
<customBinding><binding name="customMex">
<textMessageEncoding>
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport transferMode="Buffered"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647"/></binding></customBinding>
Конечные точки обслуживания будут выглядеть примерно так:
<endpoint address="" behaviorConfiguration="Server.Services.DefaultEndpointBehavior" binding="wsHttpBinding" bindingConfiguration="wsHttpBindingMessageUname" name="DefaultHttp" contract="Server.Services.IMyService" listenUriMode="Explicit" />
<endpoint address="mex" binding="customBinding" contract="IMetadataExchange" name="" bindingConfiguration="customMex" listenUriMode="Explicit" />
При такой настройке не применяется защита для mex, поэтому вы не должны получать это сообщение при попытке обновить ссылку на службу. Либо так, либо создайте другую безопасную привязку, которая использует другие учетные данные, то есть сертификат клиента на вашем компьютере.
Следующий пост MSDN содержит пример этого, и дополнительную информацию можно найти в этом блоге относительно безопасных мекс-оконечных точек.