Подключите приложение android к веб-сайту с помощью WCF
Я создал службы WCF для подключения моего android-приложения к моей базе данных SQL на онлайн-сайте , прежде всего, я могу протестировать службу на своей локальной машине, но на сервере я не могу, говорит он :
Test The test form is only available for requests from the local machine.
Я не знаю, имеет ли это эффект или нет, но когда я пытаюсь получить данные из своей базы данных с помощью приложения android, я не получил никакой ошибки, и никаких данных я не знаю, есть ли ошибка в моем коде. это код файла WCF :
мой код AndroidWebService.asmx :
<WebMethod(MessageName:="OpenAccount", Description:="this method create new account in the database"), _ System.Xml.Serialization.XmlInclude(GetType(ContactResult))> _ Public Function OpenAccount(ByVal Num As String, ByVal Pass As String) As ContactResult Dim ds As New DataSet Dim cr As New ContactResult Try Dim data As String Dim openCon As New SqlConnection("Data Source=SQL5013.site4now.net;Initial Catalog=my initial;User Id=my admin id;Password=my password;") Dim da As SqlDataAdapter = New SqlDataAdapter("select * from Password", openCon) Dim saveStaff As String = "select Spec from Password where Num = @AndroidNum AND Pass = @AndroidPass" Dim querySaveStaff As SqlCommand = New SqlCommand(saveStaff) querySaveStaff.Connection = openCon querySaveStaff.Parameters.Clear() querySaveStaff.Parameters.AddWithValue("@AndroidNum", Num) querySaveStaff.Parameters.AddWithValue("@AndroidPass", Pass) openCon.Open() querySaveStaff.ExecuteNonQuery() ds.Clear() da.Fill(ds, "Password") data = ds.Tables("Password").Rows(0).Item(2).ToString openCon.Close() cr.ErrorID = 0 cr.ErrorMessage = data Return cr Catch ex As Exception cr.ErrorID = 1 cr.ErrorMessage = ex.Message Return cr End Try End Function End Class
мой класс ContactResult возвращает ErrorID и ErrorMessage :
Public Class ContactResult Public Property ErrorID As Integer Public Property ErrorMessage As String End Class
на стороне android есть : ContactResult java class :
public class ContactResult { public static int ErrorID; public static String ErrorMessage; }
и класс java LoginActivity :
public class LoginActivity extends AppCompatActivity { private static final String TAG = "LoginActivity"; private static final int REQUEST_SIGNUP = 0; @BindView(R.id.input_email) EditText _emailText; @BindView(R.id.input_password) EditText _passwordText; @BindView(R.id.btn_login) Button _loginButton; @BindView(R.id.link_signup) TextView _signupLink; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); ButterKnife.bind(this); _loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { login(); } }); _signupLink.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Start the Signup activity Intent intent = new Intent(getApplicationContext(), SignupActivity.class); startActivityForResult(intent, REQUEST_SIGNUP); finish(); overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); } }); } public void login() { Log.d(TAG, "Login"); if (!validate()) { onLoginFailed(); return; } _loginButton.setEnabled(false); final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this, R.style.AppTheme_Dark_Dialog); progressDialog.setIndeterminate(true); progressDialog.setMessage("checking..."); progressDialog.show(); String email = _emailText.getText().toString(); String password = _passwordText.getText().toString(); // TODO: Implement your own authentication logic here. final EditText txtname=(EditText)findViewById(R.id.editName); final EditText txtphone=(EditText)findViewById(R.id.editPhone); TextView txtresult=(TextView)findViewById(R.id.textView2); Thread runt=new Thread(){ public void runt(){ CallWebservice cweb=new CallWebservice(); cweb.OpenAccount(txtname.getText().toString(),txtphone.getText().toString());} }; runt.start(); runt.join(); txtresult.setText(ContactResult.ErrorMessage); new android.os.Handler().postDelayed( new Runnable() { public void run() { // On complete call either onLoginSuccess or onLoginFailed onLoginSuccess(); // onLoginFailed(); progressDialog.dismiss(); } }, 300); } public void onLoginSuccess() { _loginButton.setEnabled(true); finish(); } public void onLoginFailed() { Toast.makeText(getBaseContext(), "login error", Toast.LENGTH_LONG).show(); _loginButton.setEnabled(true); } public boolean validate() { boolean valid = true; String password = _passwordText.getText().toString(); if (password.isEmpty() || password.length() < 4 || password.length() > 10) { _passwordText.setError("password not right !"); valid = false; } else { _passwordText.setError(null); } return valid; }*/ }
и наконец код MainActivity :
public class MainActivity extends AppCompatActivity { Button loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loginButton=(Button)findViewById(R.id.btn_login); loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { buadd(); } }); } public void buadd(){ final EditText txtname=(EditText)findViewById(R.id.editName); final EditText txtphone=(EditText)findViewById(R.id.editPhone); TextView txtresult=(TextView)findViewById(R.id.textView2); Thread runt=new Thread(){ public void runt(){ CallWebservice cweb=new CallWebservice(); cweb.OpenAccount(txtname.getText().toString(),txtphone.getText().toString());} }; runt.start(); try{ runt.join(); txtresult.setText(ContactResult.ErrorMessage); } catch(Exception ex){ } } }
Что я уже пробовал:
проверьте строку подключения и повторно загрузите сайт !
Richard Deeming
НИКОГДА храните пароли в виде обычного текста.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]