无法建立连接,因为目标计算机主动拒绝使用SOAP和REST

时间:2014-05-13 19:54:35

标签: c# web-services soap

每当我尝试使用SOAP或REST运行客户端应用程序时,我都会遇到问题。无论如何,我似乎在localhost上被拒绝了。我验证了我有两个服务的正确端口,所以我想在这里发布一些信息。使用我的SOAP服务时得到的错误如下:

  

由于内部错误,服务器无法处理请求。有关错误的更多信息,请在服务器上启用IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或来自< serviceDebug>配置行为),以便将异常信息发送回客户端,或者根据Microsoft .NET打开跟踪

我打开了跟踪,我的REST获得了以下内容

  

无法建立连接,因为目标计算机主动拒绝了它127.0.0.1:62928

Web服务定义为

    public string InsertPatientIDS(PATIENT_IDS patientInfo)
{
    string message;
    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
    builder.DataSource = "\\SQLExpress";
    builder.InitialCatalog = "pchr42563";
    builder.IntegratedSecurity = true;
    SqlConnection con = new SqlConnection(builder.ConnectionString);

    con.Open();
    SqlCommand cmd = new SqlCommand("INSERT into PATIENT_IDS(PATIENT_ID,LAST_NAME,FIRST_NAME, DATE_OF_BIRTH,ADDRESS_STREET, ADDRESS_STATE, ADDRESS_CITY,ADDRESS_ZIP,PHONE_HOME,PHONE_MOBILE,PRIMARY_ID) values" +
        "(@PATIENT_ID,@LAST_NAME,@FIRST_NAME,@DATE_OF_BIRTH,@ADDRESS_STREET, @ADDRESS_STATE, @ADDRESS_CITY,@ADDRESS_ZIP,@PHONE_HOME,@PHONE_MOBILE,@PRIMARY_ID)",con);
    cmd.Parameters.AddWithValue("@PATIENT_ID", patientInfo.PATIENT_ID);
    cmd.Parameters.AddWithValue("@LAST_NAME", patientInfo.LAST_NAME);
    cmd.Parameters.AddWithValue("@FIRST_NAME", patientInfo.FIRST_NAME);
    cmd.Parameters.AddWithValue("@DATE_OF_BIRTH", patientInfo.DATE_Of_BIRTH);
    cmd.Parameters.AddWithValue("@ADDRESS_STREET", patientInfo.ADDRESS_STREET);
    cmd.Parameters.AddWithValue("@ADDRESS_STATE", patientInfo.ADDRESS_STATE);
    cmd.Parameters.AddWithValue("@ADDRESS_CITY", patientInfo.ADDRESS_CITY);
    cmd.Parameters.AddWithValue("@ADDRESS_ZIP", patientInfo.ADDRESS_ZIP);
    cmd.Parameters.AddWithValue("@PHONE_HOME", patientInfo.PHONE_HOME);
    cmd.Parameters.AddWithValue("@PHONE_MOBILE", patientInfo.PHONE_MOBILE);
    cmd.Parameters.AddWithValue("@PRIMARY_ID", patientInfo.PRIMARY_ID);
    int result = cmd.ExecuteNonQuery();
    if (result == 1)
    {
        message = patientInfo.PRIMARY_ID + " inserted successfully";
    }
    else
    {
        message = patientInfo.PRIMARY_ID + " not inserted successfully";
    }
    con.Close();
    return message; 

并在客户端应用程序中使用

ServiceClient client = new ServiceClient();
                PCHRSoapReference1.PATIENT_IDS patientInfo = new PCHRSoapReference1.PATIENT_IDS();
                patientInfo.FIRST_NAME = txtFirst.Text;
                patientInfo.LAST_NAME = txtLast.Text;
                patientInfo.ADDRESS_STREET = txtAddress.Text;
                patientInfo.ADDRESS_CITY = txtCity.Text;
                patientInfo.ADDRESS_STATE = txtState.Text;
                patientInfo.ADDRESS_ZIP = txtZip.Text;
                patientInfo.PHONE_HOME = txtOffice.Text;
                patientInfo.PHONE_MOBILE = txtMobile.Text;
                patientInfo.PRIMARY_ID = txtPrimaryID.Text;
                patientInfo.DATE_Of_BIRTH = dtpDate.Value;
                //give a successful or unsuccessful result
                string result = client.InsertPatientIDS(patientInfo);
                MessageBox.Show(result);

app.config也以

的形式给出
<client>
  <endpoint address="http://localhost:62928/Service.svc" behaviorConfiguration="WebBehavior"
    binding="webHttpBinding" contract="PCHRContracts.IPatientIDS" />
  <endpoint address="http://localhost:59647/Service.svc" binding="wsHttpBinding"
    bindingConfiguration="WSHttpBinding_IService" contract="PCHRSoapReference1.IService"
    name="WSHttpBinding_IService">
    <identity>
      <userPrincipalName value="thebigreddudePC\thebigreddude" />
    </identity>
  </endpoint>
</client>

为了使这个更具可读性,我只发布了我的SOAP服务而不是REST的代码,因为我认为错误与更深层次的内容有关。

如果有任何明确的语法问题,我会很感激。如果它很可能是本地补偿问题,那么请告诉我。它过去曾遇到过远程连接问题,但这是我第一次使用localhost。另外,我没有使用IIS,只使用内置的VS.

2 个答案:

答案 0 :(得分:1)

最有可能的是,此错误表示可能存在阻止您的呼叫的防火墙。 因此,请务必关闭计算机上的防火墙或任何反恶意软件。 一篇类似的帖子进一步讨论了...... No connection could be made because the target machine actively refused it?

答案 1 :(得分:0)

根据评论讨论,您似乎没有在指定的端点http://localhost:62928/Service.svc上运行服务。

我认为服务是您编写的并拥有源代码的东西。将其加载到VS中并运行它。您可能需要设置项目的属性以确保它始终使用端口62928运行,而不是选择第一个可用。或者,您可以将IIS配置为指向项目并将该应用程序绑定到上述端口。

一旦这样做,您就可以通过在命令提示符telnet localhost 62928中执行来快速测试某些内容正在侦听。如果连接被接受,那么至少在那里听。如果没有,您将收到错误消息,可能与您发布的消息类似。

VS内置的是用于托管Web应用程序(和服务)的迷你Web服务器,但您需要实际运行项目才能运行(或者再次使用IIS来托管,此时它将独立于VS)。