代码之家  ›  专栏  ›  技术社区  ›  Niko Gamulin

如何在WCF中启用WebHTTP连接?

  •  3
  • Niko Gamulin  · 技术社区  · 15 年前

    我正在开发一个将数据从Android手机传输到服务器的解决方案(用c/.net编写)。

    我创建了一个WCF服务,并使用模拟器进行测试,一切正常。然后,当我尝试从手机(连接到家庭WiFi网络)登录时,收到以下异常消息:

    org.apache.http.conn.httphostconnectexception:连接到 http://192.168.1.5:8000 拒绝

    如果有人能看一下配置文件和接口,并就如何启用连接给出任何建议,我会非常感激。

    Web.CONFIG:

    <configuration>
      <system.web>
        <compilation debug="true"/>
      </system.web>
      <system.serviceModel>
        <bindings>
          <webHttpBinding>
            <binding name="DefaultBinding"
                     allowCookies="true"
                     bypassProxyOnLocal="true" />
          </webHttpBinding>
        </bindings>
        <behaviors>
          <endpointBehaviors>
            <behavior name="RESTFriendly">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <services>
          <service name="RESTServer.LoginService">
            <endpoint address=""
                      behaviorConfiguration="RESTFriendly"
                      binding="webHttpBinding"
                      bindingConfiguration="DefaultBinding"
                      contract="RESTServer.ILoginService" />
          </service>
        </services>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
      </system.serviceModel>
    </configuration>
    

    接口:

    [ServiceContract()]
    public interface ILoginService
    {
        [WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/username={username}&password={password}")]
        [OperationContract]
        Message Login(string username, string password);
    }
    

    服务实施:

    public class LoginService : ILoginService
    {
        public Message Login(string username, string password)
        {
            Message message = new Message();
            SQLWorks sqlWorks = new SQLWorks();
            string strSession = sqlWorks.Login(username, password);
            string strMessage;
            message.Session = strSession;
            if(strSession == "")
            {
                strMessage = "Login failed! Please check your username/password!";
            }
            else
            {
                strMessage = "Login Successful";
            }
            message.ErrorMessage = strMessage;
            return message;
        }
    }
    
    3 回复  |  直到 15 年前
        1
  •  0
  •   Andy White    15 年前

    为了连接到您的服务,它需要托管在公共Web服务器上。看起来您使用的地址192.168.1.5:8000是家庭网络地址,外部世界无法访问(电话)。

        2
  •  0
  •   fitnet    15 年前

    如果您使用的是Vista操作系统,则必须将地址添加到防火墙中。

    netsh http添加urlacl url= http://+:8000/ user=域\用户

        3
  •  0
  •   Dhiral Pandya    13 年前

    使用LAN IP将仿真器与Web服务连接,例如: http://192.168.1.78:8080/webservice

    但必须启用本地连接 转到:控制面板\网络和Internet \网络连接